當我編譯這個時,我總是得到零而不是值的任何建議?值爲矩形類爲零
這裏的代碼是關於我創建的一個簡單的矩形類。
#import <Foundation/Foundation.h> @interface Rectangle : NSObject { int width; int height; } @property int width, height; -(int) area; -(int) perimeter; -(void) setWH: (int) h: (int) w; @end #import "Rectangle.h" @implementation Rectangle @synthesize width, height; -(int) area { width*height; } -(int) perimeter { (width+height)*2; } -(void) setWH:(int)h :(int)w { w = width; h = height; } @end #import <Foundation/Foundation.h> #import "Rectangle.h" int main (int argc, const char*argv[]) { @autoreleasepool { Rectangle* r = [[Rectangle alloc]init]; [r setWH: 6:8]; NSLog(@"the width of the rectangle is %i and the hieght %i", r.width, r.height); NSLog(@"the area is %i and the perimeter is %i", [r perimeter], [r area]); } }
值爲矩形類爲零
回答
你翻轉的變量賦值:
-(void) setWH:(int)h :(int)w {
w = width;
h = height;
}
應該
-(void) setWH:(int)h :(int)w {
width = w;
height = h;
}
一開始我不知道如何它甚至編譯,因爲你可以」 t不需要self
。然後我看到了實例變量。
@interface Rectangle : NSObject {
int width;
int height;
}
@property int width, height;
不這樣做。 在現代Objective-C中,您不必爲屬性編寫實例變量,它們將自動合成(您不需要使用@synthesize
)。當然,你可以自由地編寫它們(特別是如果你開始學習OBjective-C),但是你最好爲實例變量選擇其他名稱,否則會導致混淆。 一個標準的做法是用一個下劃線前面加一個屬性名稱。
//interface
@property (nonatomic, assign) int myProperty;
//implementation
@synthesize myProperty = _myProperty; //this will synthesize a getter, a setter and an instance variable "_myProperty"
你應該一般喜歡訪問屬性而不是實例變量,因爲這樣一來,你就可以改變屬性的實現(getter/setter方法/存儲數據的方法),而無需改變一切。 因此對於area
和perimeter
更好的解決方案是這樣的(@ PerfectPixel已經告訴過你return
,所以只需注意self
)。
-(int) area {
return self.width * self.height;
}
-(int) perimeter {
return (self.width + self.height) * 2;
}
我不明白所以基本上我實際上不必輸入int寬度或高度,並且@property int寬度和高度是足夠的?自我和回報究竟意味着什麼? – user2304873
是的,'@ property'聲明就足夠了。它會自動創建一個getter,setter並創建一個實例變量(在花括號中聲明的變量)。一個實例變量將有一個名爲「_yourPropertyNameHere」的屬性和屬性相同的類型。 如果您希望該屬性使用另一個實例變量,那麼可以使用 '@synthesize propertyName = yourVariableNameHere'來執行此操作。 'self'引用一個對象實例(像C#中的'this',Java或C++)。 'return someValue;'意味着當前函數作爲計算結果返回'someValue'。 – FreeNickname
但所有這些問題都非常基本。我建議你閱讀一些關於Objective-C的文獻。 – FreeNickname
- 1. 零高矩形包含點
- 2. 當值爲零
- 3. 如果值爲零,則默認爲零
- 4. 我的矩形區域和周長在C中出來爲零#
- 5. 如果matlab中兩個矩形的交點爲零
- 6. 爲什麼singletone類的價值是零?
- 7. 空值爲零mysql
- 8. 如果後續值不爲零,則將pandas零值替換爲非零值
- 9. R-wordcloud調整爲矩形
- 10. UIBezzierPath爲圓角矩形
- 11. 空白轉換爲矩形
- 12. Phaser矩形標記行爲
- 13. 矩形類
- 14. 所有pos3d值爲零,而posUVZ值不爲零
- 15. 兩個矩陣的積爲零
- 16. 爲什麼getAffineTransform返回零矩陣
- 17. 矩陣全部爲零超過循環
- 18. android-圓形矩形邊界爲佈局
- 19. JavaFX:將矩形轉換爲多邊形
- 20. 將方形圖像轉換爲矩形
- 21. 將圓角矩形變換爲圓形
- 22. 無法在Piccolo2D中拉伸零矩形?
- 23. 當值不爲零時清零
- 24. SQL LEFT JOIN查找非零值爲零
- 25. 用非零值設置UIImageView.image爲零
- 26. 數據類型爲double的後端列將導致爲零值
- 27. 將矩形二元矩陣轉換爲圖形?
- 28. 將大矩形劃分爲小矩形(2D Packing)
- 29. 如何將圖像從不規則矩形更改爲矩形?
- 30. 將box2d矩形渲染爲three.js中的3d矩形
它確實應該是'setWH:(int)w:(int)h',以便名稱順序對應於參數順序。 –
或更好' - (void)setWidth:(int)w和Height:(int)h'比setWH更清晰。 – PerfectPixel
哦好的哇我沒有看到,謝謝 – user2304873