@[@"foo", @"bar"]
でNSArray
を作成したり、@{@0 : @"foo", @1 : @"bar"}
でNSDictionary
を作成したりできることはわかっています。
NSMutableArray
またはNSMutableDictionary
を作成するためのリテラル構文はありますか?
いいえ。NSMutableString
を作成するための構文もないのと同じです。可変オブジェクトは、リテラル値には特に適していません。
組み込みの方法はありませんが、通常は次のようにmutableCopy
を使用します。
NSMutableArray *array = [@[ @"1", @"2", @"3" ] mutableCopy];
しかし、NSMutableArrayまたはNSMutableDictionaryを作成するためのリテラル構文はありますか?
いいえ。最善の代替手段:
[@[ @"foo", @"bar"] mutableCopy]
はい。しかし、そうではありません。これを見てください;
NSMutableArray *list = [@[] mutableCopy];
これにより、変更不可能な配列@[]
が作成され、mutableCopy
が呼び出され、NSMutableArray *
が返されます。 @[]
の代わりに、任意の配列リテラルを指定できます。
配列と辞書のネストされたリテラルがある場合、NSJSONSerialization
を使用して、これを完全に変更可能なバージョンに変換できます。例えば:
NSArray* array = @[ @{ @"call" : @{ @"devices" : @[ @"$(devices)" ] } } ];
NSData* data = [NSJSONSerialization dataWithJSONObject:array
options:0
error:nil];
NSJSONReadingOptions options = NSJSONReadingMutableContainers |
NSJSONReadingMutableLeaves;
NSMutableArray* mutableArray = [NSJSONSerialization JSONObjectWithData:data
options:options
error:nil];
少し回り道ですが、少なくとも自分でコードを書く必要はありません。そして、良いことは、NSJSONSerialization
が非常に高速であることです。