我想使用@property
语法来声明一个公开只读的合成属性,但是有一个可以在类中私下调用的setter。
由于它是Objective-C,这基本上意味着setFoo:
方法将被合成,但是在类本身之外调用它将导致警告(无法识别的选择器)。要触发警告,我必须声明属性readonly
;有没有办法强制只在类中可用的合成setter?
答案 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
这样做会设置你的价值,并且可以只读。 感谢。