如何在头文件 (.h) 中创建一个不可变的只读属性,在实现 (.m) 中创建一个可变的读写属性



我有一个保存字典JSONData的对象。从头文件到将访问它的其他类,我希望此属性仅是只读且不可变的。

@interface MyObject : NSObject
@property (readonly, strong, nonatomic) NSDictionary *JSONData;
@end

但是,我需要它从实现文件中readwrite和可变,如下所示,但这不起作用:

@interface MyObject ()
@property (readwrite, strong, nonatomic) NSMutableDictionary *JSONData;
@end
@implementation MyObject
// Do read/write stuff here.
@end

能做些什么来强制执行我想要的那种抽象吗?我查看了其他问题,虽然我已经知道如何从.h.m readwrite属性readonly,但我找不到任何关于可变性差异的信息。

在实现中需要一个单独的私有可变变量。您可以重写 getter 以返回不可变对象。

@interface MyObject () {
  NSMutableDictionary *_mutableJSONData;
}
@end
@implementation MyObject 
// ...
-(NSDictionary *)JSONData {
   return [NSDictionary dictionaryWithDictionary:_mutableJSONData];
}
// ...
@end

无需实现二传手,因为它readonly.

最新更新