我是一名正在学习Swift编程语言的初学者,在此过程中,有时会接触到旧的Objective-C编程语言及其代码。
我想更好地理解Setter和Getter,因此有些问题需要请教。
我知道可以通过花括号在.h文件中创建实例变量,但通常我使用属性。这些属性由实例变量支持,并自动提供Getter和Setter方法。
例如:
Vehicle .h 文件:
@interface Vehicle : NSObject
@property int myProperty;
@end
因为我创建了这个属性,在vehicle.m文件中不需要声明Getter和Setter方法,因为它们会被编译器自动创建。所以我可以创建一个vehicle对象,设置并获取值。 示例 main.m
Vehicle *myvehicle = [[vehicle alloc] init];
[myvehicle myProperty] // myvehicle.myProperty
[myvehicle setMyProperty : 10] // myvehicle.myProperty = 10;
现在我读到可以重写我创建的属性“myProperty”的自动生成Getter和Setter方法。当声明自己版本的Getter和Setter时,我必须在vehicle.h和vehicle.m文件中声明两个方法。在vehicle.m文件中,我不使用self关键字调用对象,而是使用其自动生成的实例变量(_myProperty)。这样做对吗?
我尝试了这个方法,但总是出现错误,不知道原因和要点。
示例:
Vehicle.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。我只需要在想要更改 ivar 名称时使用 @synthesize。
我不确定为什么会卡住,也不知道关键点在哪里。您能解释一下吗? 提前感谢!