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