Je sais que je peux créer un NSArray
avec @[@"foo", @"bar"]
ou NSDictionary
avec @{@0 : @"foo", @1 : @"bar"}
.
Existe-t-il une syntaxe littérale pour créer un NSMutableArray
ou un NSMutableDictionary
?
Non. Tout comme il n'y a pas non plus de syntaxe pour créer un NSMutableString
. Les objets mutables ne sont pas particulièrement adaptés aux valeurs littérales.
Il n'y a pas de méthode intégrée, mais j'utilise généralement mutableCopy
comme ceci:
NSMutableArray *array = [@[ @"1", @"2", @"3" ] mutableCopy];
Mais, existe-t-il une syntaxe littérale pour créer un NSMutableArray ou un NSMutableDictionary?
Non. Meilleure alternative:
[@[ @"foo", @"bar"] mutableCopy]
Oui. Mais pas tout à fait. Regarde ça;
NSMutableArray *list = [@[] mutableCopy];
Cela crée un tableau non mutable @[]
et appelle mutableCopy
qui renvoie un NSMutableArray *
. Au lieu de @[]
, vous pouvez donner n'importe quel littéral de tableau.
Si vous avez un littéral imbriqué de tableaux et de dictionnaires, vous pouvez le transformer en une version entièrement mutable en passant par NSJSONSerialization
. Par exemple:
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];
C'est un peu un détour, mais au moins vous n'avez pas à écrire le code vous-même. Et la bonne chose est que NSJSONSerialization
est très rapide.