Wie packt man normale und implizite Optionen richtig aus?
Es scheint Verwirrung in diesem Thema zu geben, und ich möchte nur eine Referenz für alle Wege und wie sie nützlich sind.
Es gibt derzeit zwei Möglichkeiten, um Optionen zu erstellen:
%Vor% Was sind alle Möglichkeiten, beides auszupacken? Was ist der Unterschied zwischen der Verwendung von !
und ?
beim Entpacken?
Es gibt viele Ähnlichkeiten und nur eine Handvoll Unterschiede.
Deklaration: var opt: Type?
Unsachgemäßes Auspacken: let x = opt!.property // error if opt is nil
Existenz sicher prüfen: if opt != nil { ... someFunc(opt!) ... } // no error
Sicheres Auspacken über Bindung: if let x = opt { ... someFunc(x) ... } // no error
Sicher verketten: var x = opt?.property // x is also Optional, by extension
Sicheres Zusammenführen von Nil-Werten: var x = opt ?? nonOpt
Deklaration: var opt: Type!
Unsauberes Auspacken (implizit): let x = opt.property // error if opt is nil
Unsicheres Auspacken über Zuweisung:
let nonOpt: Type = opt // error if opt is nil
Unsauberes Auspacken über Parameterübergabe:
func someFunc(nonOpt: Type) ...
someFunc(opt) // error if opt is nil
Existenz sicher prüfen: if opt != nil { ... someFunc(opt) ... } // no error
Sicher verketten: var x = opt?.property // x is also Optional, by extension
Sicheres Zusammenführen von Nil-Werten: var x = opt ?? nonOpt
Ein optionaler Typ bedeutet, dass die Variable null sein kann.
Beispiel:
%Vor%Das Fragezeichen zeigt an, dass es möglicherweise keinen Wert hat.
Aber wenn Sie so sagen:
%Vor%Es wird ein Fehler angezeigt.
Um den Wert abzurufen, müssen Sie ihn entpacken:
%Vor%Aber wenn Sie automatisch auspacken möchten:
%Vor%Dann:
%Vor%Keine Notwendigkeit, auszupacken. Hoffe es wird helfen.