我有一个名为 Constants 的单例类,我需要在其中设置一些应用范围的常量。我喜欢这些常量是只读的。所以我在 Constants.h 文件中做了以下操作
@interface Constants : NSObject
{
}
@property (nonatomic, readonly)double U_LAT;
@property (nonatomic, readonly)double U_LNG;
然后在我的.m文件中我得到了这个方法
-(id)init
{
self = [super init];
self.U_LAT = 49.2765;
self.U_LNG = -123.2177;
return self;
}
我从这段代码中得到这个错误:
Assignment to readonly property
我可以不在 init 方法中初始化我的只读变量吗?如果不是,我该如何初始化它们?
最佳答案
self.propertyName = val;
与 [self setPropertyName:val];
相同——它需要一个 setter 方法才能存在。只读属性没有 setter 方法。
您可以直接设置支持该属性的 ivar,但是:
-(id)init
{
self = [super init];
_U_LAT = 49.2765;
_U_LNG = -123.2177;
return self;
}
如果您允许自动合成属性,则 ivar 的名称将是带有下划线前缀的属性名称。如果您有明确的 @synthesize propName;
,则 ivar 将具有相同的名称。您还可以使用任何您喜欢的名称创建一个变量,再次使用合成语句:@synthesize cat = dog;
属性也可以公开只读,但类可写;这涉及在类扩展中声明一个 setter 方法或 redeclaring the property in the extension .
关于ios - 分配给只读属性错误 iOS 6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14665946/