objective-c cocoa nsmutablearray nsmutabledictionary objective-c-literals

objective c - ¿Hay una sintaxis literal para colecciones mutables?



objective-c cocoa (5)

Sé que puedo crear un NSArray con @[@"foo", @"bar"] o un NSDictionary con @{@0 : @"foo", @1 : @"bar"} .

¿Hay una sintaxis literal para crear un NSMutableArray o un NSMutableDictionary ?


Pero, ¿hay una sintaxis literal para crear un NSMutableArray o un NSMutableDictionary?

No. La mejor alternativa:

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


No hay un camino integrado, pero usualmente uso mutableCopy esta manera:

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


No. Así como tampoco hay una sintaxis para crear un NSMutableString . Los objetos mutables no son particularmente adecuados para los valores literales.


Sí. Pero no del todo. Mira esto;

NSMutableArray *list = [@[] mutableCopy];

Esto crea una matriz no mutable @[] y llama a mutableCopy que devuelve una NSMutableArray * . En lugar de @[] , puede dar cualquier matriz literal.


Si tiene un literal anidado de matrices y diccionarios, puede convertirlo en una versión completamente mutable NSJSONSerialization . Por ejemplo:

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];

Es un poco desviado, pero al menos no tiene que escribir el código usted mismo. Y lo bueno es que NSJSONSerialization es muy rápido.