プロパティが「読み取り専用」として定義され、さまざまなコンポーネント間で共有される多くの「モデル」オブジェクトがあります。私は(ローカル変更可能な状態のためにそれらを使用して)、オブジェクトのローカル変更可能なコピーを作成する必要がありますいくつかのケースでは変更可能なコピーを作成するためのObjective-Cパターン
それが作成された後、オブジェクトは不変であるべきと私はむしろNSMutableCopyプロトコルを実装していません。変更されたオブジェクトは、copy + 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つの別々のクラスを作成するのは非常に面倒でエラーが発生しやすいです。 私は、 "let"変数ではなく "var"を定義し、自動的に変更可能なバージョンを取得するような "迅速な"メカニズムが必要であると考えていました。 私は元のコピーを作成することに頼っていました(オリジナルから実際のコピーを "self"ではなく)返し、KVCを使って "readonly"プロパティを変更しました。 。 –