我创建了一个简单的协议,它在符合要求的类上强制执行NSString
属性:
@protocol CPTSettingViewModel <NSObject>
@property (nonatomic) NSString *titleText;
@end
当我创建一个符合此协议的类时,Xcode建议我合成该属性:
@synthesize titleText;
我的问题是,当我尝试在初始化程序中引用此属性的实例变量时,收到错误:
使用未声明的标识符'_titleText';你的意思是'titleText'吗?
如何访问从协议继承的属性的实例变量,而不是以我使用属性本身的方式结束?
- (instancetype)initWithTitleText:(NSString *)titleText selectionText:(NSString *)selectionText {
self = [super init];
if (self) {
self.titleText = titleText;
_selectionText = selectionText;
}
return self;
}
答案 0 :(得分:5)
使用@synthesize
时的默认实例变量名称是属性本身的名称 - 在这种情况下为titleText
。默认的自动合成(由于属性在协议中不起作用)将插入等效于@synthesize titleText = _titleText
,这就是下划线在这种情况下成为通常名称的方式。我相信您只需使用下划线(即@synthesize titleText = _titleText
)指定名称,以使实例变量名称符合您的预期。