访问从协议继承的属性的实例变量

时间:2018-04-29 23:30:34

标签: ios objective-c properties protocols instance-variables

我创建了一个简单的协议,它在符合要求的类上强制执行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;
}

1 个答案:

答案 0 :(得分:5)

使用@synthesize时的默认实例变量名称是属性本身的名称 - 在这种情况下为titleText。默认的自动合成(由于属性在协议中不起作用)将插入等效于@synthesize titleText = _titleText,这就是下划线在这种情况下成为通常名称的方式。我相信您只需使用下划线(即@synthesize titleText = _titleText)指定名称,以使实例变量名称符合您的预期。