Über Failable Initializers bietet Swift ab Version 1.1 die Möglichkeit, einfach und flexibel auf einen Fehler beim Initialisieren von Objekten zu reagieren.
Eine entsprechend präparierte Klasse sieht so aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class MyClassUpTo10 { var value: Int = 0 init?(value: Int) { if value <= 10 { self.value = value } else { return nil } } } |
Mit dem Fragezeichen ? hinter dem Initializer init definieren wir, dass das erzeugte Objekt optional ist.
Beim Erstellen einer Instanz gehen wir dann folgendermaßen vor:
1 2 3 4 5 6 7 8 |
if let myVal = MyClassUpTo10(value: 8) { println("die \(myVal.value) funktioniert") } else { println("funktioniert nicht") } |
Dieser Aufruf funktioniert und gibt »die 8 funktioniert« aus.
1 2 3 4 5 6 7 8 |
if let myVal = MyClassUpTo10(value: 42) { println("die \(myVal.value) funktioniert") } else { println("funktioniert nicht") } |
Der Aufruf mit dem Wert 42 ist dagegen nicht gültig und gibt entsprechend »funktioniert nicht« aus, da statt einer Objekt-Instanz der Klasse der Wert nil zurückgegeben wurde.