Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

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

NSMutableArray *list = [@[] mutableCopy];

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

Ответ 5

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