Objective-C属性,只读公开,但有私有的setter

时间:2011-02-15 18:45:57

标签: objective-c properties

我想使用@property语法来声明一个公开只读的合成属性,但是有一个可以在类中私下调用的setter。

由于它是Objective-C,这基本上意味着setFoo:方法将被合成,但是在类本身之外调用它将导致警告(无法识别的选择器)。要触发警告,我必须声明属性readonly;有没有办法强制只在类中可用的合成setter?

2 个答案:

答案 0 :(得分:101)

我认为你所寻找的是所谓的课程扩展。您可以在标题中声明该属性为只读:

@interface MyClass : NSObject {
}

@property (readonly, assign) NSInteger myInteger;

@end

然后在实现文件的类扩展中重新声明:

@interface MyClass ()

@property (readwrite, assign) NSInteger myInteger;

@end


@implementation MyClass

@end

有关Apple documentation

的更多信息,请访问:

答案 1 :(得分:1)

我可能会迟到,但没有扩展我使用了以下技术

@interface MyClass : NSObject {
 NSString * name;
}

@property (readonly, strong) NSString * name;

@end

另一方面是实现文件

@implementation MyClass
 @synthesize name;

 - (id)initWithItems:(NSDictionary *)items {
self = [super init];
if(self)
{ 
  name = @"abc";
}

return self;
}

@end

这样做会设置你的价值,并且可以只读。 感谢。

相关问题