是否有可变集合的文字语法?

时间:2012-09-14 01:22:41

标签: objective-c cocoa nsmutablearray nsmutabledictionary objective-c-literals

我知道我可以使用NSArray创建@[@"foo", @"bar"]NSDictionary创建@{@0 : @"foo", @1 : @"bar"}

是否有用于创建NSMutableArrayNSMutableDictionary的文字语法?

5 个答案:

答案 0 :(得分:96)

没有内置方式,但我通常只使用mutableCopy这样:

 NSMutableArray *array = [@[ @"1", @"2", @"3" ] mutableCopy];

答案 1 :(得分:17)

没有。就像没有创建NSMutableString的语法一样。可变对象并不特别适合文字值。

答案 2 :(得分:16)

  

但是,是否有创建NSMutableArray或NSMutableDictionary的字面语法?

没有。最佳选择:

[@[ @"foo", @"bar"] mutableCopy]

答案 3 :(得分:8)

是。但并不完全。看看这个;

NSMutableArray *list = [@[] mutableCopy];

这会创建一个不可变的数组@[]并调用mutableCopy,返回NSMutableArray *。代替@[],您可以提供任何数组文字。

答案 4 :(得分: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非常快。