我有許多「模型」對象,其屬性被定義爲「只讀」並在各個組件之間共享。用於創建可變副本的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道具) 。 –