56

NSArraywith@[@"foo", @"bar"]またはNSDictionarywithを作成できることはわかってい@{@0 : @"foo", @1 : @"bar"}ます。

NSMutableArrayまたはを作成するための文字通りの構文はありますNSMutableDictionaryか?

4

5 に答える 5

104

組み込みの方法はありませんが、私は通常mutableCopy次のように使用します。

NSMutableArray *array = [@[ @"1", @"2", @"3" ] mutableCopy];
于 2012-09-14T01:39:19.913 に答える
18

いいえ。どちらかを作成するための構文がないのと同じようにNSMutableString。可変オブジェクトは、リテラル値には特に適していません。

于 2012-09-14T01:36:16.187 に答える
17

しかし、NSMutableArrayまたはNSMutableDictionaryを作成するための文字通りの構文はありますか?

いいえ。最良の代替案:

[@[ @"foo", @"bar"] mutableCopy]
于 2012-09-14T01:39:20.370 に答える
9

はい。しかし、完全ではありません。これを見てください;

NSMutableArray *list = [@[] mutableCopy];

これにより、変更不可能な配列が作成され、を返す@[]呼び出しが行われます。の代わりに、任意の配列リテラルを指定できます。mutableCopyNSMutableArray *@[]

于 2015-08-03T05:37:49.560 に答える
3

配列と辞書のネストされたリテラルがある場合は、を実行することでこれを完全に変更可能なバージョンに変えることができます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が非常に速いことです。

于 2013-04-29T20:42:24.627 に答える