我正在學習Swift編程語言,在此期間我有時會與舊的Objective-C編程語言及其代碼聯繫。Objective-C:用實例變量覆蓋Getter&Setter(使用_)
我是一個絕對的初學者,因此我有一些問題可以更好地理解Setter和Getter。
所以,我知道我可以通過大括號在.h文件中創建一個實例變量,但通常我使用屬性。這些屬性由實例變量支持,並自動提供Getter和Setter方法。
例子:
車輛的.h文件:
@interface Vehicle : NSObject
@property int myProperty;
@end
因爲我創造了這個屬性我沒有申報getter和setter方法在vehicle.m文件,因爲它們是由編譯器自動創建。所以我可以創建一個車輛對象,設置並獲得價值。
例
的main.m
Vehicle *myvehicle = [[vehicle alloc] init];
[myvehicle myProperty] // myvehicle.myProperty
[myvehicle setMyProperty : 10] // myvehicle.myProperty = 10;
現在,我讀了它可以覆蓋自動創建Getter和我創造財產 「myProperty的」 的setter方法。當聲明我自己的Getter和Setter版本時,我必須在vehicle.h和vehicle.m文件中聲明兩個方法。在vehicle.m文件中,我不使用self關鍵字調用對象,而是使用它自動創建的實例變量(_myProperty)。這樣對嗎?
我試過了,但總是得到一個錯誤,我不知道爲什麼,什麼是重點。
例
車輛的.h文件:
@interface Vehicle : NSObject
@property int myProperty;
-(int) myProperty; //my new Getter method
-(void) setMyProperty: (int)updatedMyProperty; //My new Setter method
@end
車輛.m文件:
@implementation Vehicle
-(int) myProperty {
if (! _myProperty) {
_myProperty = NO;
}
return _myProperty;
}
-(void) setMyProperty: (int)updatedMyProperty {
if (_myProperty == updatedMyProperty) return;
_myProperty = updatedMyProperty;
}
@end
我總是得到錯誤 「使用未聲明的標識符的」 和我不不知道爲什麼。如果我理解正確,我不必使用@synthesize聲明ivar或其名稱,因爲編譯器會自動爲我創建名爲_myProperty的ivar。當我想改變伊娃的名字時,我只需要使用@synthesize。
我不知道爲什麼我卡住了,重點是什麼。你能解釋一下嗎? 在此先感謝!
無關的,但上述你有'[myvehicle setMyProperty = 10] '。顯然這應該是'[myvehicle setMyProperty:10]'。 – Rob