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.