访问从协议继承的属性的实例变量
Access instance variables of properties inherited from protocols
我创建了一个简单的协议,它在符合 classes:
的情况下强制执行 NSString
属性
@protocol CPTSettingViewModel <NSObject>
@property (nonatomic) NSString *titleText;
@end
当我创建一个符合此协议的 class 时,Xcode 建议我合成 属性:
@synthesize titleText;
我的问题是,当我尝试在初始化程序中引用此 属性 的实例变量时,我收到错误消息:
Use of undeclared identifier '_titleText'; did you mean 'titleText'?
如何访问从协议继承的属性的实例变量,而不是在我使用 属性 本身的地方以这样的方式结束?
- (instancetype)initWithTitleText:(NSString *)titleText selectionText:(NSString *)selectionText {
self = [super init];
if (self) {
self.titleText = titleText;
_selectionText = selectionText;
}
return self;
}
当您使用 @synthesize
时,默认的实例变量名称是 属性 本身的名称——在本例中为 titleText
。默认的自动合成(由于 属性 在协议中而不起作用)将插入等价于 @synthesize titleText = _titleText
,这就是下划线在这种情况下成为通常名称的方式。我相信你可以只用下划线指定名称(即 @synthesize titleText = _titleText
)来让实例变量名称与你期望的相匹配。
我创建了一个简单的协议,它在符合 classes:
的情况下强制执行NSString
属性
@protocol CPTSettingViewModel <NSObject>
@property (nonatomic) NSString *titleText;
@end
当我创建一个符合此协议的 class 时,Xcode 建议我合成 属性:
@synthesize titleText;
我的问题是,当我尝试在初始化程序中引用此 属性 的实例变量时,我收到错误消息:
Use of undeclared identifier '_titleText'; did you mean 'titleText'?
如何访问从协议继承的属性的实例变量,而不是在我使用 属性 本身的地方以这样的方式结束?
- (instancetype)initWithTitleText:(NSString *)titleText selectionText:(NSString *)selectionText {
self = [super init];
if (self) {
self.titleText = titleText;
_selectionText = selectionText;
}
return self;
}
当您使用 @synthesize
时,默认的实例变量名称是 属性 本身的名称——在本例中为 titleText
。默认的自动合成(由于 属性 在协议中而不起作用)将插入等价于 @synthesize titleText = _titleText
,这就是下划线在这种情况下成为通常名称的方式。我相信你可以只用下划线指定名称(即 @synthesize titleText = _titleText
)来让实例变量名称与你期望的相匹配。