Swift 2 lernen

Sein oder nicht sein: Optionals

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Aus einem Text soll ein Int werden. Was aber, wenn das nicht geht? Ist der Int dann "0", oder INT_MIN oder INT_MAX? Nein, der Int ist einfach NICHT. Das bieten die Optionals.
11:32

Transkript

Ein weiteres großartiges Konzept von Swift stellen die sogenannten "Optionals" dar, und was mit Variablen diesen Typs gemeint ist, schauen wir uns hier gemeinsam in einem Playground an. Wir wollen also mit diesen Optionals arbeiten, und haben da gleich ja, fantastische, wieder neue Möglichkeiten, die es zu entdecken gilt. Was ist ein bekanntes Problem? Ein bekanntes Problem ist es zum Beispiel, eine Zeichenkette, sprich einen String, der einen numerischen Wert enthält, in einen Integer zu überführen, damit wir damit rechnen können. Einfachster Fall, der Benutzer tippt in ein Textfeld eine Zahl ein, und wir wollen dann natürlich mit dem Integer-Wert dieser Zahl operieren, um eine Rechnung durchzuführen. Jetzt kann es aber auch sein, dass der Benutzer, vielleicht weil wir nicht richtig aufgepasst haben, bei der Vorgabe der Tastatur, in der Lage ist, in dieses Textfeld auch nichtnumerische Zeichen einzugeben, Buchstaben zum Beispiel. Also können wir ja einen buchstabendurchsetzten String sicherlich nicht so einfach in eine Integer-Zahl konvertieren. Was soll nun diese Routine, die sich darum kümmert, liefern? Ein min_Int oder ein max_Int oder eine Null - was haben wir denn da zur Verfügung? Wenn ich eine Variable habe, vom Typ Integer, und wir haben hier unsere Zahl, und wir weisen ihr mal den Wert Null zu, und ich möchte jetzt von dieser Zahl quasi den Int_max Wert sehen, beziehungsweise andersherum, von einem Integer den max_value können wir uns ja auch so ausgeben, oder den min_Wert eines Integers, das wäre der Minimal, der kleinstmögliche Wert eines 64-bit-Integers, oder eben eine Null. Das sind ja alles gültige Zahlen. Ja, es wäre halt jetzt tatsächlich wichtig, dass wir eine Möglichkeit schaffen, dass auch ein Int einen Wert annehmen kann, der einfach sagt, Hm. Ich bin falsch. Aber nicht Null oder nicht min von Int, weil das sind alles gültige Werte. Und genau das können wir tatsächlich mit diesen Optionals erreichen, denn holen wir uns doch hier einmal das Beispiel, 100 als Text, davon dann bitte den Int_value, und da sehen wir dann schon die Notation, Int? Ein Fragezeichen würde quasi auslösen, Ich könnte ein Int sein, aber ich bin optional, ich weiß nicht, ob das funktioniert hat. Geben wir nämlich jetzt hier die Zahl aus, dann sehen wir nicht mehr wie vorher, bei der var i, die wir auf 42 setzen, und die wir hier ausgeben wollen, dass da steht 42, sondern es steht hier "Some 100". Denn es kann ja auch sein, dass das schiefgeht, was machen wir denn, wenn hier ein Text steht? Dann evaluiert tatsächlich unsere Zahl zu einem Nil. Und ein Nil ist nicht gleichzusetzen in Swift mit einer numerischen Null, das ist wirklich ein ganz ganz großer Unterschied. Also haben wir die Möglichkeit, mit diesen Optionals, genau diesem Sachverhalt Rechnung zu tragen, dass ein Wert, auch ein eingebauter, kleiner, primitiver Datentyp wie Int, Double, Float, Bool und so weiter, tatsächlich optional sein kann. So, wie sieht das Ganze nun formal aus? Wir können sagen, ich habe hier eine Zahl, sie ist vom Typ Int, aber sie kann auch nicht gesetzt sein. Jetzt wollen wir also mit dieser Zahl arbeiten. Wir wollen, wenn sie existiert, 100 dazu addieren, und das Ergebnis ausgeben. Jetzt müssen wir aber vorher befragen, ist diese Zahl auch wirklich da, hat sie einen Wert? Weil wenn ich sage, hier: var summe = zahl + 100, dann hab ich an der Stelle ein kleines Problem. denn zahl ist ja eben optional, wir wissen noch nicht, ist da ein Wert drin oder nicht? Also sollten wir vorher abfragen, und das können wir jetzt so machen, if zahl != Nil, dann bitte ausgeben, var summe = zahl + 100, das wollen wir dann berechnen. Im anderen Fall wollen wir sagen, println("zahl ist Nil"), ja, wir können also nicht damit arbeiten. So, nun haben wir aber hier ein Problem, denn zahl ist ja eben als optional deklariert. Auch wenn ich vorher abgefragt habe, ist denn zahl ungleich Nil, ist aus Compiler-Sicht hier immer noch die Gefahr gegeben, dass wir auf ein Nil zugreifen, und das würde natürlich zur Laufzeit ganz üble Folgen haben. Also muss ich jetzt hier diesen Optional anwrappen, und das machen wir durch ein Ausführungszeichen. Und dann ist auch unser Code wieder gültig, und unser Projekt, unser Storyboard übersetzt sich, aber tatsächlich, die Zahl ist Nil, denn wir haben nur die Variable angelegt, ihr aber keinen Wert zugewiesen, also ist sie tatsächlich Nil. Hätten wir irgendwo zwischendrin gesagt, zahl = 50, dann laufen wir in diesen Wert hier hinein, in diesen If von der Zahl, und wir berechnen dann eine Summe aus dem Wert von zahl + 100, aber ganz ganz wichtig, es war optional, um dann wirklich auf den Wert zuzugreifen, muss ich es unwrappen, ich muss dann hier auf den Wert schließen. Klingt jetzt kompliziert, ich lass noch mal den Fehler hier stehen, das Schöne ist, hier bekommen wir eine Unterstützung, wenn ich auf die Fehlermeldung klicke, dann bekommen wir hier den Hinweis, soll ich das reparieren hier, mit einem Ausrufezeichen, dann klickt man nur darauf, und dann wird für Sie auch der Code korrigiert. Also, das ist jetzt eine natürlich etwas steife Herangehensweise, erst prüfen müssen, und dann doch anbounden, geht denn das nicht eleganter? Ja, es geht eleganter, denn man darf tatsächlich sagen: If let wertInZahl = zahl dann soll etwas passieren, und ansonsten nicht - und hier ist jetzt wieder ein kleiner Fehler aufgetreten, hoffen wir mal, dass wir den wieder korrigiert bekommen, liebes Xcode. So - das muss natürlich dann hier so sein - und mit ein bisschen Glück beruhigt sich unser Xcode auch wieder, und wir können weiterarbeiten - Sollte der Fehler bestehen bleiben, was hier der Fall ist, das kann passieren, das passiert uns als Trainer, genauso wie Ihnen auch als Anwender, es schadet ja nichts, wenn wir das hier mal in dem Training auch dann zeigen, wir müssen Xcode einfach neu starten, und den Playground neu öffnen. Es gehört fast zu einem Xcode- und Swift-Training dazu, mit den Fehlern von Xcode zu arbeiten, es kommt leider relativ häufig vor, aber das liegt im Moment halt in der Natur der Sache, Apple wird das sicherlich bald abstellen. Aber das, worum es hier aber geht, ist jetzt dieses If-Let-Konstrukt, dass wir sagen: wenn zahl tatsächlich nicht Nil ist, dann wollen wir das in diese Variable hineinkopieren, und dürfen dann natürlich mit dieser Variablen arbeiten, ohne dass wir noch ein Ausführungszeichen anhängen müssen, denn in diesem Teil von unserem If-Let laufen wir ja nur, wenn in zahl ein Wert steht, hätten wir zahl immer noch nicht initialisiert, dann laufen wir ja auch hier in den Else-Zweig hinein. Und jetzt gibt es dafür natürlich auch noch eine elegantere Schreibweise, denn wir müssen nicht zwingend hier eine andere Variable erfinden, wir dürfen diese tatsächlich auch genauso benennen, denn diese let-Konstante wird dann diese quasi überschreiben, innerhalb des Gültigkeitsbereiches in diesem Block hier, in den geschweiften Klammern, so dass wir dann in zahl den Unwrapped-Wert zur Verfügung haben, der eben sich hinter dieser Optional-Variablen verborgen hat. Also, Optionals erlauben es, dass nicht nur Objekte, Instanzen davon, sondern auch Datentypen wie Int, Float, Double, Bool und so weiter, einen Nicht-Wert annehmen können, und damit kann ein Bool tatsächlich sein true oder false oder nicht vorhanden, ein Int kann jede gültige Zahl annehmen, oder nicht definiert sein, und das ist ein Riesenunterschied im Vergleich zu Objective-C und ein ganz ganz tolles Sprachkonstrukt, was uns hier Swift zur Verfügung stellt, und über diese Komfortvariante If let, und wir prüfen dann quasi nach, haben wir einen Wert, dann will ich mit dem auch arbeiten, im anderen Fall muss ich eben etwas anderes tun, ist auch der Verwaltung innerhalb unserer Programme von diesen Optionals recht übersichtlich.

Swift 2 lernen

Erkunden Sie die wichtigsten Sprachmerkmale von Swift und ihre modernen Eigenschaften wie Generics, Extensions, Tupels und Optionals.

4 Std. 2 min (30 Videos)
Derzeit sind keine Feedbacks vorhanden...

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!