Kapitel 2: Grundlagen / 2.9 Optionals / 2.9.4 Erzwungenes Unwrapping

Wenn Sie sich sicher sind, dass ein Optional einen Wert enthält, es also nicht nil ist, dann können Sie durch ein Ausrufungszeichen hinter dem Variablennamen das Optional in sein nicht-optionales Pendant verwandeln.

Damit Sie einen besseren Überblick bekommen, ziehe ich in dem folgenden Beispiel den Code einmal bewusst auseinander:

// Deklarationen

var einString: String
var einOptionalerInteger: Int?
var einInteger: Int

// Zuweisung

einString = "1024"

// Berechnung

einOptionalerInteger = einString.toInt()

// Erzwungenes Unwrapping

einInteger = einOptionalerInteger!

// Ausgabe

println("Der Integerwert ist \(einInteger).")

Wenn Sie möchten, können Sie die vier Schritte Deklaration, Zuweisung, Berechnung und erzwungenes Unwrapping aber auch in einer Zeile ausführen:

var einInteger = "1024".toInt()!
println("Der Integerwert ist \(einInteger).")

In beiden Fällen ist die Ausgabe, wie Sie sich denken können, schlicht:

Der Integerwert ist 1024.

In der Realität werden Sie sich aber oft nicht sicher sein können, ob ein Optional tatsächlich einen Wert enthält. Ist er nämlich nil und Sie erzwingen das Unwrapping, dann fliegt Ihnen ein Laufzeitfehler, eine Runtime Exception um die Ohren.

Sie können aber vorher mit einer if-Abfrage prüfen, ob ein Optional nil enthält oder nicht. Nehmen wir folgendes Beispiel:

Sie schreiben ein Programm, bei dem der Benutzer in ein Textfeld sein Alter eingeben muss. Das Textfeld prüft in diesem Beispiel aber nicht eigenständig, ob tatsächlich eine Zahl eingegeben wurde, Sie müssen es also händisch prüfen.

Die Benutzereingabe befindet sich in der Variable alterString, die werten Sie aus, im Beispielcode geben wir ihr aber einen Wert vor, damit alles compiliert.

var alterString = "32"

var alterOptional = alterString.toInt()

if alterOptional != nil {

    var alter = alterOptional!

    // Jetzt können Sie mit dem Alter weiter arbeiten.

    println("Der Benutzer ist \(alter) Jahre alt.")

} else {

    // Der Benutzer hat kein korrektes Alter eingegeben.
    // Sie könnten jetzt zum Beispiel einen Hinweis an
    // den Benutzer ausgeben, das zu korrigieren.
}

Die Zeichenfolge != prüft auf Ungleichkeit, == würde auf Gleichkeit prüfen, mehr dazu kommt in einem späteren Kapitel, wenn es um Verzweigungen im Programmablauf geht.

Kapitel 2.9.4: Erzwungenes Unwrapping

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.