iOS:Objective-C 创建类属性错误:使用未声明的标识符

Posted

技术标签:

【中文标题】iOS:Objective-C 创建类属性错误:使用未声明的标识符【英文标题】:iOS: Objective-C creating class property error: Use of undeclared identifier 【发布时间】:2017-08-04 19:00:34 【问题描述】:

我正在尝试使用 example 之后的类属性。但我收到以下错误:“使用未清除的标识符 '_myProperty'”。

这是我的实现:

@interface myClass()

@property (class,strong,nonatomic) NSString *myProperty;

@end


+ (NSString*)myProperty

    if (!_myProperty) 

    
    return [NSString new];

为什么我会收到此错误?或者你们中的任何人都知道解决这个问题?

非常感谢您的帮助

【问题讨论】:

我不熟悉 Objective-c 语法,但问题似乎你的变量 myProperty 像计算变量 a getter 一样工作。您没有在任何地方声明,换句话说,没有提供任何初始值。对不起,如果我误解了。 【参考方案1】:

类属性不会在 Objective-C 中合成。您必须提供自己的支持变量和自己的 getter/setter:

static NSString *_myProperty = nil;

+ (NSString *)myProperty 
    if (!_myProperty) 
        _myProperty = [NSString new];
    

    return _myProperty;


+ (void)setMyProperty:(NSString *)myProperty 
    _myProperty = myProperty;

【讨论】:

【参考方案2】:

类属性并且永远不会自动合成,必须实现 getter 和/或 setter,并且不会为它们自动创建支持变量。

如果您的属性需要一个必须声明的变量,请在实现文件中使用static 全局变量——这实际上是Objective-C 中的“类变量”。或者,如果您只需要一个 getter,您可以声明一个局部于 getter 本身的 static 变量,进一步降低其可见性并将 getter 和变量作为一个包保持在一起。

HTH

【讨论】:

【参考方案3】:

实际上,类属性不是类的成员。所以它将立即创建,所有实例都将使用这个。所以没有什么可以合成的。

【讨论】:

以上是关于iOS:Objective-C 创建类属性错误:使用未声明的标识符的主要内容,如果未能解决你的问题,请参考以下文章

错误:Objective-C 中的“无法使同类视图出队”

是啥导致了带有强化 xcodebuild(Objective-C)的未知属性属性“类”?

Objective-C 类方法:点语法和​​“类属性”

ios学习路线—Objective-C(属性修饰符)

如何使用iOS原生语言编写Swift类?

在 Objective-C 中的类属性上使用单词“set”