let- constant
var-variable
[Konstante gegen Variable]
[Struktur gegen Klasse]
Offizielle doc docs.swift.org sagt
Der Wert von a constantkann nicht geändert werden, sobald er festgelegt wurde, während a variablein Zukunft auf einen anderen Wert festgelegt werden kann.
Diese Terminologie beschreibt eigentlich eine Umhängen Mechanismus
Veränderbarkeit - veränderbar - Der Status des Objekts kann nach der Erstellung geändert werden

Wert und Referenztyp [Info]
Wert (Struktur, Aufzählung)
Swifts structkönnen ihren Veränderbarkeitsstatus ändern:
let+ struct= immutable= Wertekonstante
Sie kann nicht neu zugewiesen oder geändert werden
var+ struct= mutable
Es kann neu zugewiesen oder geändert werden
Referenztyp (Klasse)
Swifts classessind mutableein Priorat
let+ class= Adresskonstante
Sie kann nicht neu zugewiesen und geändert werden
var+ class
Es kann neu zugewiesen oder geändert werden
//STRUCT
//let + struct
let letStructA = StructA()
//change FAIL
letStructA.a = 5 //Compile ERROR: Cannot assign to property: 'structALet' is a 'let' constant
//reassign FAIL
letStructA = StructA() // Compile ERROR: Cannot assign to value: 'structALet' is a 'let' constant
//var + struct
var varStructA = StructA()
//change OK
varStructA.a = 5
//reassign OK
varStructA = StructA()
//CLASS
//let + class
let letClassA = ClassA()
//change OK
letClassA.a = 5
//reassign FAIL
letClassA = ClassA() // Compile ERROR: Cannot assign to value: 'classALet' is a 'let' constant
//var + class
var varClassA = ClassA()
//change OK
varClassA.a = 5
//reassign OK
varClassA = ClassA()
mutating - Funktionen von Mutating Struct
Sie können die Methode einer Struktur als markierenmutating
- Gibt an, dass diese Funktion interne Eigenschaftswerte ändert.
- Kann nur auf
var+ verwendet werdenstruct
public struct StructA {
public var a = 0
public init() {}
//func foo() { //Compile ERROR: Cannot assign to property: 'self' is immutable
mutating func foo() {
a = 5
}
}
inout Struktur innerhalb einer Funktion ändern
Sie können den Parameter einer Funktion (der struct ist) als markieren inout
Da structein Werttyp als Wert übergeben wird, ruft die Ergebnisfunktion eine Kopie ab. Wenn Sie einen structals inoutParameter markieren , bedeutet dies, dass dieser Parameter wird varund Sie einen Status von ändern können structund diese Änderungen außerhalb des Funktionsumfangs sichtbar sind
//func foo(myStruct: StructA) { //Compile ERROR: line - myStruct.a = 10: Cannot assign to property: 's' is a 'let' constant
func foo(myStruct: inout StructA) {
myStruct.a = 10
}
//using
//foo(myStruct: &letStructA) // Compile EROOR: Cannot pass immutable value as inout argument: 'letStructA' is a 'let' constant
foo(myStruct: &varStructA)
Verwenden letSie, wann immer Sie können. Verwenden varSie, wenn Sie müssen.