Immuable/Mutable Collections Swift
Je faisais allusion à Apple Swift guide de programmation pour la compréhension de la création de la Mutable/objets immuables(Tableau, Dictionnaire, des Ensembles, des Données de Swift de la langue. Mais je ne pouvais pas comprendre comment créer un immuable collections de Swift.
Je voudrais voir les équivalents de Swift pour la suite en Objective-C
Immuable Tableau
NSArray *imArray = [[NSArray alloc]initWithObjects:@"First",@"Second",@"Third",nil];
Mutable Tableau
NSMutableArray *mArray = [[NSMutableArray alloc]initWithObjects:@"First",@"Second",@"Third",nil];
[mArray addObject:@"Fourth"];
Immuable Dictionnaire
NSDictionary *imDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"Value1", @"Key1", @"Value2", @"Key2", nil];
Mutable Dictionnaire
NSMutableDictionary *mDictionary = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"Value1", @"Key1", @"Value2", @"Key2", nil];
[mDictionary setObject:@"Value3" forKey:@"Key3"];
Vous devez vous connecter pour publier un commentaire.
Tableaux
Créer immuable tableau
Première façon:
Deuxième façon:
Créer mutable tableau
Ajouter l'objet à la matrice
Dictionnaires
Créer immuable dictionnaire
Créer mutable dictionnaire
Ajouter nouvelle paire de dictionnaire
pour Plus d'informations sur l'Apple Developer
Dictionary
est vraiment immuable (à l'opposé de Tableau)var
.array += "Forth"
pas de travail de longue durée dans Xcode 6 GM de le changer pourarray += ["Forth"]
ouarray.append("Forth")
Swift n'a pas de baisse de remplacement pour
NSArray
ou l'autre des classes de collection en Objective-C.Il y a de la matrice de dictionnaire et des classes, mais il convient de noter que ces sont des "valeur" types, par rapport à NSArray et NSDictionary qui est un "objet" types.
La différence est subtile, mais peut être très important pour éviter les cas de bord de bugs.
Dans swift, vous créez une "immuable" tableau avec:
Et un "mutable" tableau avec:
Mutable tableaux peuvent être modifiés comme
NSMutableArray
:Cependant, vous ne pouvez pas passer une mutable tableau à une fonction:
Mais le code ci-dessus fonctionne avec un NSMutableArray:
Vous pouvez obtenir
NSMutableArray
comportement à l'aide d'uninout
paramètre de méthode:Ré-écrit cette réponse 2015-08-10 pour tenir compte de la Swift comportement.
Il y a un seul
Array
et unDictionary
type de Swift. La mutabilité dépend de la façon dont vous le construire:c'est à dire si vous créez une assigner à une variable, il est mutable, alors que si vous créez une assigner à une constante, il n'est pas.
AVERTISSEMENT: Immuable tableaux ne sont pas entièrement immuable! Vous pouvez toujours modifier leur contenu, pas seulement dans l'ensemble de leur longueur!
Il suffit de déclarer vos (éventuelles)de l'objet ou variable avec
et
De plus en plus profondément informations
Lire “La Swift Langage De Programmation.”
Si vous souhaitez travailler avec
Array
(Swift) comme avecNSArray
, vous pouvez utiliser une simple fonction de pont. Exemple:Il fonctionne de la même pour
let
.De Apple docs:
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/CollectionTypes.html#//apple_ref/doc/uid/TP40014097-CH8-ID105
D'autres utilisations de immuable/mutable collections dépend de pourquoi vous voulez qu'ils soient mutable/immuables. Les Collections sont valeur types de Swift, ce qui signifie que leur contenu est copié, lorsqu'ils sont attribués à une autre valeur, ou transmis à une autre fonction/méthode. Par conséquent, vous n'avez pas besoin de s'inquiéter de savoir si une méthode de réception de la fonction peut modifier le tableau d'origine. Vous n'avez donc pas besoin d'assurer le retour immuable collection si votre classe est la tenue d'une mutable collection, par exemple.
Il n'y a pas de casting pour cela. Mais au lieu de cela, vous pouvez utiliser NSMutableDictionary de l'initialiseur qui prend un dictionnaire: