Ein optionales ist entweder gesetzt oder nicht gesetzt (nicht null oder null) ... was uns eine wichtige Entscheidung lässt. "Wie sollen wir unseren Code schreiben, damit er für 2 beide Zustände korrekt funktioniert?" Die Art und Weise, wie wir das Optionale auspacken, entscheidet für uns.
Es gibt verschiedene Ansätze, mit denen Sie einer nicht festgelegten Option entgegenwirken können.
- Absturz!
- Standardmäßig wird der Wert auf etwas gesetzt - wenn er nicht festgelegt wurde.
- Scheitern Sie ordnungsgemäß, dh tun Sie nichts, aber weisen Sie ihn auch zu, wenn der Wert festgelegt wurde.
- Anmutig scheitern, dh nichts tun, aber wenn der Wert festgelegt wurde ... etwas tun (es ist nur mehr als eine einzelne Zuweisung).
Nachfolgend sind die 4 Ansätze aufgeführt
Das erzwungene Auspacken stürzt ab, wenn Sie keinen Wert haben. Sie möchten dies tun, wenn dieser Wert von entscheidender Bedeutung ist, z. B. der Titel eines Films (jeder Film MUSS einen Namen haben). !
wird zum erzwungenen Auspacken verwendet.
movieTitle = movie.title!
Die Verwendung von Null-Koaleszenz ist eine weitere Möglichkeit, die Ihnen mehr Kontrolle gibt. Dies bedeutet, dass sie nicht abstürzt, wenn der Wert nicht festgelegt ist, und dass sie auch nichts festlegt, wenn sie nicht festgelegt wird. Sie würde das tun, was Sie ihnen sagen Dies würde z. B. den Namen des Films standardmäßig auf untitled_movie setzen, wenn kein Name festgelegt wäre. ??
wird für die Nullverschmelzung verwendet.
var movieTitle = movie.title ?? "untitled_Movie"
Die Verwendung der optionalen Verkettung führt zu nichts, wenn Sie keinen Wert haben, und legt den Wert fest, wenn Sie einen Wert haben. Sie tun dies für etwas, dessen Wert nicht von entscheidender Bedeutung ist, z. B. für den Namen des Agenten Ihres Schauspielers . ?
wird für die optionale Verkettung verwendet.
let agent = movie.leadActor?.agent //would not crash if you don't have a lead actor (optional chaining)
let agent = movie.leadActor!.agent //would crash if you don't have a lead Actor (forced wrapping)
Wenn Sie if-let
(oder guard
zwei verschiedene Arten der optionalen Bindung ) verwenden, erhalten Sie mehr Kontrolle . Es stürzt nicht ab, wenn der Wert nicht festgelegt ist. Wenn der Wert festgelegt ist, können Sie etwas tun. Wenn es nicht festgelegt ist, können Sie eine else
Anweisung hinzufügen .
if let supportingActor = movie.supportingActor{
print(" The supporting actor is \(supportingActor)}
Dies ist die am häufigsten verwendete Methode zum Auspacken, da vom erzwungenen Auspacken etwas abgeraten wird. Weitere Informationen darüber, warum davon abgeraten wird, finden Sie hier . Für einen guten Vergleich zwischen guard
und if-let
sehenguard vs. if-let
Randnotiz:
Optionale Bindung und optionale Verkettung werden üblicherweise zusammen verwendet:
if let agent = movie.leadActor?.agent {
ContactInfo = agent.phoneNumber
} // if-let is the optional *binding* part, the movie dot leadActor dot is the optional *chaining*