ios - 访问从协议(protocol)继承的属性的实例变量

标签 ios objective-c properties protocols instance-variables

我创建了一个简单的协议(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/

相关文章:

ios - Espresso ANERuntimeEngine 程序推理溢出

ios - 从另一个委托(delegate)类中检索 UIColor

iOS - 在 Swift 中,我们是 "send a message"还是 "call method/function"?

iphone - 将触摸传递给下一个响应者或其他 subview iOS

objective-c - 不允许分配给 'readonly' 返回结果,但属性声明为 "readwrite"

c# - 尝试访问派生类中基类属性的 protected 访问器时出错

ios - 如何快速终止操作?

ios - 如何将文本字段数据保存在字典中然后保存在数组中?

ios - 在NSDictionary中使用下标访问值和仅使用valueForKey访问值之间的区别

audio - Mediainfo批量显示音频采样频率