我想声明一个公共(public)的不可变属性:
@interface Foo
@property(strong, readonly) NSSet *items;
@end
…在实现文件中支持可变类型:
@interface Foo (/* private interface*/)
@property(strong) NSMutableSet *items;
@end
@implementation
@synthesize items;
@end
我想要的是实现中的可变集合,当从外部访问时该集合被强制转换为不可变集合。 (我不在乎调用者可以将实例转换回 NSMutableSet
并破坏封装。我住在一个安静、体面的小镇,那里不会发生这种事情。)
现在,我的编译器在实现中将该属性视为 NSSet
。我知道有很多方法可以让它工作,例如使用自定义 getter,但是有没有一种方法可以简单地使用声明的属性来完成它?
最佳答案
最简单的解决方案是
@interface Foo {
@private
NSMutableSet* _items;
}
@property (readonly) NSSet* items;
然后就
@synthesize items = _items;
在你的实现文件中。然后您可以通过 _items 访问可变集,但公共(public)接口(interface)将是一个不可变集。
关于objective-c - 如何声明由可变类型支持的不可变属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7710400/