Optional ist ein spezieller Typ in Swift, der entweder einen Wert des Typs T oder keinen Wert (nil) enthalten kann. Er wird als T? geschrieben. Erlaubt es, explizit anzugeben, dass eine Variable keinen Wert haben kann, und gewährleistet die Überprüfung des Vorhandenseins eines Wertes zur Kompilierzeit.
Mechanismen zur Extraktion von Werten:
let str: String? = "hello" if let s = str { print(s) }
guard let s = str else { return } print(s)
let s = str!
(kann zu einem Laufzeitfehler führen, wenn der Wert nil ist)
let length = str?.count
??):let value = str ?? "default"
Kann man nil einer Variablen des Typs String, und nicht String?, zuweisen, und was passiert dann?
Antwort:
Nein, einer normalen Variable (String) kann kein Wert nil zugewiesen werden. Nur ein Optional kann nil sein, andernfalls tritt ein Kompilierfehler auf.
Beispiel:
var a: String // a = nil // Kompilierfehler: Nil cannot be assigned to type 'String' var b: String? b = nil // OK
Geschichte
In der Anwendung kam es aufgrund von Force Unwrapping eines Wertes, in der Annahme, dass immer eine gültige Antwort aus der Datenbank kommt, zu einem Absturz, wenn das Feld fehlte. Der Fehler wurde durch eine zusätzliche Überprüfung über Optional Binding behoben.
Geschichte
Bei der Versendung von Push-Benachrichtigungen wurde der Benutzername in einer nicht-optionalen Variablen gespeichert, was zu einem Absturz der Anwendung führte, wenn der Name aus der API leer war. Nach der Analyse wurde der Typ auf Optional geändert und die Handhabung von nil hinzugefügt.
Geschichte
Im Projekt, als ein optionaler Wert an eine Funktion übergeben wurde, war das Argument ohne Optional-Typ deklariert. Es traten versteckte Fehler und Abstürze auf. Änderungen wurden vorgenommen: Der Parameter wurde optional, und die Überprüfungen auf das Vorhandensein eines Wertes wurden hinzugefügt.