我创建了一个简单的协议(protocol),它在一致的类上强制执行 NSString
属性:
@protocol CPTSettingViewModel <NSObject>
@property (nonatomic) NSString *titleText;
@end
当我创建一个符合此协议(protocol)的类时,Xcode 建议我合成该属性:
@synthesize titleText;
我的问题是,当我尝试在初始化程序中引用此属性的实例变量时,我收到错误:
Use of undeclared identifier '_titleText'; did you mean 'titleText'?
如何访问从协议(protocol)继承的属性的实例变量,而不是在使用属性本身时得到类似的结果?
- (instancetype)initWithTitleText:(NSString *)titleText selectionText:(NSString *)selectionText {
self = [super init];
if (self) {
self.titleText = titleText;
_selectionText = selectionText;
}
return self;
}
最佳答案
使用@synthesize
时的默认实例变量名称是属性本身的名称 - 在本例中为titleText
。默认的自动合成(由于该属性位于协议(protocol)中而不起作用)将插入与 @synthesize titleText = _titleText
等效的内容,这就是在这种情况下下划线成为常用名称的方式。我相信您只需指定带下划线的名称(即 @synthesize titleText = _titleText
)即可使实例变量名称与您期望的名称相匹配。
关于ios - 访问从协议(protocol)继承的属性的实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50092274/