Je n'ai aucun problème, je voudrais juste quelques précisions sur un problème concernant la mutabilité. En Objective-C nous utiliserons par exemple NSMutableArray
pour obtenir un tableau mutable et un NSArray
pour obtenir un tableau mutable. Je ne connais pas grand chose au fonctionnement interne des deux, mais d'après ce dont je me souviens, je crois que la différence est que NSArray
ne réserve qu'une quantité de mémoire spécifique à la valeur initiale qui la rend plus efficace, alors que NSMutableArray
n'a aucune idée combien de mémoire il faudra. Vraisemblablement cela signifie que NSMutableArray
a des pointeurs vers des bits de mémoire qui sont partout et pas un par un comme avec NSArray
? Ou peut-être réserve-t-il juste beaucoup de mémoire en espérant qu'il ne s'épuisera pas?Comment let/var résout-il la mutabilité?
Dans Swift, la substitution évidente est let
pour immutable et var
pour mutable. Si une variable est déclarée avec ces mots-clés, je ne vois pas de différence entre Swift et Objective-C. Cependant, je ne comprends pas comment cela fonctionne si je déclare la variable sans la variable var/let en la stockant par exemple dans une autre variable.
Disons que j'ai un dictionnaire tel que [String: [String]]
. En d'autres termes, pour chaque clé de chaîne, il existe un tableau de chaînes. Considérez le cas suivant:
var dictionary: [String: [String]] = [:]
dictionary["key"] = ["string0", "string1"]
//dictionary now is ["key": ["string0", "string1"]]
Mais qu'est-ce que le tableau de chaînes maintenant? Est-ce que c'est mutable parce que le dictionnaire est mutable? Est-ce mutable parce que tout ce que nous attribuons est mutable? Que diriez-vous du cas suivant:
let dictionary = ["key": ["string0", "string1"]]
dictionary["key"].append("string2")
Est-ce que cela fonctionnerait?
Je suppose que le problème clé est qu'en Objective-C, je définis toujours si je travaille avec NSMutableArray
ou NSArray
. Créer un tableau en utilisant la syntaxe littérale [@"string"]
conduit toujours à un NSArray
et il ne sera pas modifiable à moins que je ne le spécifie. Dans Swift, je ne sais pas quand est ce qui est mutable.
Merci