我有许多“模型”对象,其属性被定义为“只读”并在各个组件之间共享。用于创建可变副本的Objective-C模式
在某些情况下,我需要创建对象的本地副本可变(使用他们的本地可变状态)
我宁愿不落实NSMutableCopy协议被创建后,它的对象应该是一成不变的。修改后的对象可以在复制+ mutate操作后“传递”。
是否有建议的机制,或者我应该只实现一个构造函数接收“更改”参数?
例如一个对象,它解析JSON到本地类型:
@interface ImmutableObject : NSObject
// various "readonly" properties
...
-(instancetype)initWithJSON:(NSDictionary *)jsonDictionary;
@property (nonatomic, readonly) MyClass1 *prop1;
@property (nonatomic, readonly) MyClass2 *prop2;
...
@property (nonatomic, readonly) NSArray<MyClass100 *> *prop100;
@end
@implementation
-(instancetype)initWithJSON:(NSDictionary *)jsonDictionary {
self = [super init];
[self parseDictionaryToNative:jsonDictionary];
return self;
}
@end
某处在代码:
ImmutableObject *mutated = [immutableObject mutableCopy]; // best way to accomplish this?
// change some values...
mutated.prop1 = ... // change the value to something new
self.state = [mutated copy]; // save the new object
由于该类代表了一个相当大的模型,因此创建2个独立的类非常繁琐且容易出错。 我希望有一个“快速”的机制来定义一个“var”而不是“let”变量,并自动获得一个可变版本。 我已经使出原创(从原来的,而不是“自我”)返回一个实际的副本,并使用KVC来改变“只读”属性,(因为我正在改变〜2-3道具) 。 –