Wie andere gesagt haben, ist es eine doppelte Optional, völlig unabhängig von der Null Koaleszenz-Operator (??
).
es auszupacken, auszupacken Sie nur eine regelmäßige optional, zweimal:
let doubleOptional: MyStruct?? = MyStruct()
guard let singleOptional = doubleOptional else {
//first unwrapping failed
}
guard let wrappedValue = singleOptional else {
//second unwrapping failed
}
//use wrappedValue
Diese recht selten sind, aber es gibt Zeiten, wenn sie nützlich sind.
Betrachten Sie zum Beispiel eine Datenstruktur, die den Durchschnitt eines Arrays speichert. Das Array ist möglicherweise leer, daher sollte der Durchschnittswert nil
lauten, um anzuzeigen, dass kein Durchschnitt vorhanden ist. Angenommen, der Durchschnittswert ist sehr teuer und wir möchten ihn in einer Cache-Schicht speichern. Diese Caching-Ebene könnte eine doppelte Option haben, die diesen Durchschnitt darstellt. Wenn der Wert Optional.None
ist (d. H. nil
), wissen wir, dass der Cache noch keinen Wert hat, daher muss er berechnet werden. Wenn der Wert Optional.Some(Optional.None)
ist, wissen wir, dass der Cache einen Wert hat, aber dass es keinen gültigen Durchschnitt gibt (dh das Array war leer. Schließlich könnte der Wert Optional.Some(Optional.Some(/*...*/))
sein, was einen gültigen Cachespeicherwert eines gültigen Durchschnitts darstellt.
Es ist 'Optional>', ein "optional optional MyStruct". –
Verschachtelte Optionals: 'Optional (Optional (Wert))'. Zweimal auspacken. – Moritz
Typisches Beispiel 'UIApplicationDelegate.window', eine optionale Eigenschaft, die ein enthalten kann Optional: Oder indizieren Sie ein optionales Wörterbuch: – Sulthan