it-swarm.com.ru

Существует ли буквальный синтаксис для изменчивых коллекций?

Я знаю, что могу создать NSArray с @[@"foo", @"bar"] или NSDictionary с @{@0 : @"foo", @1 : @"bar"}.

Существует ли буквальный синтаксис для создания NSMutableArray или NSMutableDictionary?

51
ma11hew28

Нет. Так же, как нет синтаксиса для создания NSMutableString. Изменчивые объекты не особенно подходят для буквальных значений.

17
Lily Ballard

Не существует встроенного способа, но я обычно использую mutableCopy так:

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

Но существует ли буквальный синтаксис для создания NSMutableArray или NSMutableDictionary?

Нет. Лучшая альтернатива:

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

Да. Но не совсем. Взгляните на это;

NSMutableArray *list = [@[] mutableCopy];

Это создает неизменяемый массив @[] и вызывает mutableCopy, который возвращает NSMutableArray *. Вместо @[] вы можете указать любой массив.

8
nidheeshdas

Если у вас есть вложенный литерал массивов и словарей, вы можете превратить его в полностью изменяемую версию, пройдя через 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 очень быстрый.

3
meaning-matters