Immer wenn wir etwas mit einem optionalen Wert in swift brauchen, müssen wir es auspacken, um zu arbeiten, nicht auf dem optionalen, aber auf dem Wert "nach innen" das optionale.Geben Sie gegossene optionale Werte ein
var optionalString:String? = "Hello"
optionalString!.append(" World!")
Beachten Sie das Ausrufezeichen in der zweiten Zeile.
Aber wenn Sie den optionalen Typ-Operator (als?) Auf einem optionalen Wert verwenden, müssen Sie das optionale nicht auspacken, wir stellen es nur mit dem optionalen selbst zur Verfügung, und es funktioniert einfach magisch.
let sneakyString:Any? = "Hello!"
let notSoSneakyString = sneakyString as? String
Hinweis der abwesenden Ausrufezeichen in der zweiten Zeile.
Die Magie ist etwas deutlicher, wenn wir es buchstabieren:
let sneakyString:Any? = Optional("Hello")
let notSoSneakyString = sneakyString as? String
Es ist nicht eine Zeichenfolge wir versuchen, aber eine Enumeration mit einem String als assoziiertes Wert zu werfen.
Ich würde erwarten, dass ich hätte dies tun:
let sneakyString:Any? = "Hello!"
let notSoSneakyString = sneakyString! as? String
Hinweis auf das Ausrufezeichen in der zweiten Zeile.
Wirken die Typ-Cast-Operatoren auf Optionale und Nicht-Optionale auf die gleiche Weise?
Vielleicht macht das doch Sinn. Zum Entfernen eines Nul-Optionals ist ein Laufzeitfehler erforderlich. Und wir übertragen nicht von Optional (Any) auf String, sondern von Optional (Any) auf Optional (String). – weenzeel