分配给只读属性错误iOS 6

ban*_*ing 0 attributes properties objective-c ios ios6

我有一个名为常量的Singleton类,我需要在那里设置一些应用程序范围的常量.我喜欢这些常数只是readonly.所以我在Constants.h文件中执行了以下操作

 @interface Constants : NSObject
 {

 }

 @property (nonatomic, readonly)double U_LAT;
 @property (nonatomic, readonly)double U_LNG;
Run Code Online (Sandbox Code Playgroud)

然后在我的.m文件中我得到了这个方法

 -(id)init
 {
     self = [super init];

     self.U_LAT = 49.2765;
     self.U_LNG = -123.2177;

     return self;
 }
Run Code Online (Sandbox Code Playgroud)

我从这段代码中得到了这个错误:

 Assignment to readonly property
Run Code Online (Sandbox Code Playgroud)

我可以不在init方法中初始化我的readonly变量吗?如果不是我如何初始化它们?

Jos*_*ell 10

self.propertyName = val;是[self setPropertyName:val];- 它需要一个setter方法存在.只读属性没有setter方法.

您可以设置直接支持酒店的ivar,但是:

-(id)init
 {
     self = [super init];

     _U_LAT = 49.2765;
     _U_LNG = -123.2177;

     return self;
 }
Run Code Online (Sandbox Code Playgroud)

如果允许自动合成属性,则ivar的名称将是以下划线为前缀的属性名称.如果你有明确的@synthesize propName;,那么ivar将具有相同的名称.您还可以使用synthesize语句创建具有您喜欢的任何名称的变量:@synthesize cat = dog;

该物业也可以是公开的只读,但可以由该类写入; 这涉及在类扩展中声明 setter方法或在扩展中重新声明属性.


dan*_*anh 5

我认为更好的方法是在私有接口中重新声明属性,如下所示:

// .h

@interface Constants : NSObject
@property(nonatomic, readonly) double U_LAT;
@end

// .m

@interface Constants ()
@property(nonatomic, readwrite) double U_LAT;
@end
Run Code Online (Sandbox Code Playgroud)

是的,在inits和dealloc中,直接将变量称为_U_LAT.