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

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)来让实例变量名称与你期望的相匹配。