Ich bezog mich auf Apples Swift-Programmierhandbuch, um die Erstellung von veränderlichen / unveränderlichen Objekten (Array, Wörterbuch, Mengen, Daten) in Swift-Sprache zu verstehen. Aber ich konnte nicht verstehen, wie man in Swift unveränderliche Sammlungen erstellt.
Ich würde gerne die Entsprechungen in Swift für das Folgende in Ziel-C sehen
Unveränderliches Array
NSArray *imArray = [[NSArray alloc]initWithObjects:@"First",@"Second",@"Third",nil];
Veränderbares Array
NSMutableArray *mArray = [[NSMutableArray alloc]initWithObjects:@"First",@"Second",@"Third",nil];
[mArray addObject:@"Fourth"];
Unveränderliches Wörterbuch
NSDictionary *imDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"Value1", @"Key1", @"Value2", @"Key2", nil];
Veränderbares Wörterbuch
NSMutableDictionary *mDictionary = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"Value1", @"Key1", @"Value2", @"Key2", nil];
[mDictionary setObject:@"Value3" forKey:@"Key3"];
ios
objective-c
swift
immutability
mutable
Pranav Jaiswal
quelle
quelle
Dictionary
ist wirklich unveränderlich (im Gegensatz zu Array)var
.Swift hat keinen Ersatz für
NSArray
oder für die anderen Sammlungsklassen in Objective-C.Es gibt Array- und Wörterbuchklassen, aber es sollte beachtet werden, dass dies "Wert" -Typen sind, verglichen mit NSArray und NSDictionary, die "Objekt" -Typen sind.
Der Unterschied ist subtil, kann aber sehr wichtig sein, um Edge-Case-Fehler zu vermeiden.
In Kürze erstellen Sie ein "unveränderliches" Array mit:
Und ein "veränderliches" Array mit:
Veränderbare Arrays können wie folgt geändert werden
NSMutableArray
:Sie können jedoch kein veränderbares Array an eine Funktion übergeben:
Der obige Code funktioniert jedoch mit einem NSMutableArray:
Sie können
NSMutableArray
das Verhalten mithilfe einesinout
Methodenparameters erreichen:Diese Antwort wurde am 10.08.2015 neu geschrieben, um das aktuelle Swift-Verhalten widerzuspiegeln.
quelle
Es gibt nur einen
Array
und einenDictionary
Typ in Swift. Die Veränderlichkeit hängt davon ab, wie Sie es konstruieren:Wenn Sie also eine Zuweisung zu einer Variablen erstellen, ist diese veränderbar, während dies beim Erstellen einer Zuweisung zu einer Konstanten nicht der Fall ist.
WARNUNG: Unveränderliche Arrays sind nicht vollständig unveränderlich! Sie können ihren Inhalt immer noch ändern, nur nicht ihre Gesamtlänge!
quelle
Deklarieren Sie einfach Ihr (beliebiges) Objekt oder Ihre Variable mit
und
Für tiefere Informationen
Lesen Sie „Die schnelle Programmiersprache“.
quelle
Wenn Sie mit
Array
(Swift) wie mit arbeiten möchtenNSArray
, können Sie eine einfache Bridge-Funktion verwenden. Beispiel:Es funktioniert genauso für
let
.quelle
Aus Apples eigenen Dokumenten:
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/CollectionTypes.html#//apple_ref/doc/uid/TP40014097-CH8-ID105
Andere Verwendungen von unveränderlichen / veränderlichen Sammlungen hängen davon ab, warum sie veränderlich / unveränderlich sein sollen. Kollektionen sind Werttypen in Swift, was bedeutet , dass ihr Inhalt kopiert wird , wenn sie auf einen anderen Wert zugeordnet sind, oder auf eine andere Funktion / Methode übergeben. Daher müssen Sie sich keine Gedanken darüber machen, ob eine Empfangsmethodenfunktion das ursprüngliche Array ändern könnte. Daher müssen Sie nicht sicherstellen, dass eine unveränderliche Sammlung zurückgegeben wird, wenn Ihre Klasse beispielsweise eine veränderbare Sammlung enthält.
quelle
[Nicht veränderbar und unveränderlich]
Das Array von Swift kann stummgeschaltet werden
[let vs var, Wert vs Referenztyp]
Unveränderliche Sammlung [Info] - ist eine Sammlungsstruktur, deren Änderungen nicht geändert werden können. Dies bedeutet, dass Sie nach der Erstellung keine hinzufügen, entfernen oder ändern können
let + struct
(wieArray
,Set
,Dictionary
) ist besser geeignet zu sein unveränderlicheEs gibt einige Klassen (z. B.
NSArray
), die keine Schnittstelle zum Ändern des inneren Zustands bietenaber
Es wäre lieber
unmodifiable
Arrayquelle
Dafür gibt es keine eingebaute Besetzung. Stattdessen können Sie den Initialisierer von NSMutableDictionary verwenden, der ein Wörterbuch verwendet:
quelle