Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Swift lernen

Prüfen und Casten

Testen Sie unsere 2017 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Mit Swift elegant realisiert: Das Casten von Werten auf andere Ebenen der Klassenhierarchie.
11:05

Transkript

Beim Programmieren stellt sich oft die Frage, von welchem Typ eine bestimmte Variable aktuell ist. um sie dann bei einem Verfahren, beispielsweise was man Downcasting nennt, zu einem bestimmten Typ zu konkretisieren, damit man gezielte Methoden aufrufen kann. Klingt wahnsinnig spannend, wie das zusammenhängt, schauen wir uns in diesem Video gemeinsam an. Wir schaffen uns einen kleinen Playground, prüfen und casten sind letztendlich die Zauberwörter, um die es hier geht, und dann können wir uns das Ganze hier in Ruhe anschauen. Schaffen wir uns zunächst eine Variable etwas, und etwas soll sein vom Datentyp Any, und wir weisen einmal die Zahl 100 zu. Scheint zu funktionieren, gehen wir etwas später her und sagen, etwas ist jetzt ein Testkunde, also ein String, das wird wohl auch funktionieren, oder noch später kann etwas den Wert 22,5 annehmen. Die Frage ist nun, wenn wir feststellen wollen, was ist denn aktuell der Datentyp der Variablen etwas? Und das macht man in Swift mit dem Keyword is, das heißt, wir dürfen abprüfen, if etwas is Double, sollte das der Fall sein, dann sagen wir Hurrah, es ist ein Double! Und genau das scheint auch hier zu funktionieren. Gehen wir mal weiter. Else if etwas is Int, dann würden wir einfach ausgeben, dass es ein Int ist. Else if etwas is String, führen wir hier das Ganze doch noch weiter, In jedem anderen Fall haben wir momentan keine Ahnung, was es denn sein würde. Also etwas ist im Moment ein Double. Kommentieren wir diese Zeile einmal aus, dann ist ja etwas gleich Testkunde, Testkunde ist aber ein String. Else if etwas is String - dann sind wir hier gelandet, kommentieren wir das auch aus, dann haben wir eben dort einen Int momentan, und wenn wir zu guter Letzt noch etwas gemacht hätten wie etwas is false, ja, dann haben wir im Moment keine Ahnung, denn Else if etwas is bool haben wir hier in unserer If-Else-Kaskade nicht geprägt, also haben wir dementsprechend hier den default gewählt, keine Ahnung. So, das ist also die Möglichkeit abzuprüfen, welcher Datentyp jetzt eine Variable tatsächlich ist, Und nur um das dann hier kurz zu zeigen, wenn man so etwas hätte wie var, und ich habe eine Zahl, und die ist vom Typ Int, und da steht 42 drin, und ich möchte jetzt prüfen, ist denn zahl ein Integer, auch wenn ich's gerade hingeschrieben habe, manchmal weiß man's ja vielleicht nicht, und dementsprechend möchte ich auch das prüfen, if zahl is Int - werde jetzt aber zunächst einmal überrascht, denn hier meckert der Compiler und sagt: Ja, dieser is-Test, der wäre always true. weil ja zahl nun mal ein Integer ist, okay, klar, ich hab's halt vergessen, steht ja nur eine Zeile drüber. Wenn wir aber im Programm so etwas mal machen wollen oder müssen, sprich einen konkreten Typ ermitteln, obwohl wir's eigentlich wissen müssten, dann dürfen wir sagen: if zahl as Any is Int, also, ist diese Zahl betrachtet als ein Any denn ein Integer, dann gebe halt Int aus, weil wenn es so da steht, glaubt man ja manchmal nicht, dass es ein Integer ist. Genauso wie wir dann da sagen dürfen: Else if zahl as Any is Double dann wäre es ein Double, und man kann dann hier überprüfen, 42.0, aha. Dann ist unsere Zahl ein Double. Haben wir nur 42 angegeben, wird über die Type Inference ein Integer als Datentyp gewählt. Also auch das hier ist möglich, um mit dem is-Keyword auch auf konkrete Variablen, die ja einen konkreten Typ haben, auch wenn wir ihn hier nicht haben hinschreiben müssen, über die Type Inference wurde er ermittelt, aber über diesen Weg können wir auch das abprüfen. Jetzt wollen wir an dieser Stelle aber noch einen guten Schritt weitergehen, was passiert denn, wenn wir ein Array haben? Unsere Daten, und unsere Daten wäre ein gemischtes Array, aus den Farben rot, gelb, gruen, und meinetwegen noch blau und dazu noch ein paar Integer-Werte. Was sich hier hinter verbirgt, wissen wir, es ist ein Array von Any's. Das wäre jetzt die Deklaration, nur die Type Inference macht das ja für uns. Ja, und jetzt stellen wir uns doch die Aufgabe, über unser Array zu iterieren, und wenn wir einen Integer finden, diesen Wert um 100 zu vergrößern, und den println auszugeben, das heißt, hier machen wir noch weitere Farben dahinter, Äh - lila und braun, so. Und dann ziehen wir das ein bisschen rüber, dann passt es wieder in eine Zeile. Also, Integers, die wir finden, da wollen wir 100 dazu addieren, und das einfach mit println ausgeben. Wir können ja nur über unser Array laufen, indem wir sagen, for Element in unsereDaten, Was haben wir jetzt für einen Datentyp? Ja, Element wird sein ein Any. Ich muss jetzt also prüfen, handelt es sich im Moment an dieser Stelle, bei dem Any, um einen Int? Weil das hier wird ja ein String sein, und nur wenn wir Int's haben, wollen wir etwas Besonderes machen. also: if Element is Int Jetzt wissen wir, dass unser Element ein Integer ist. um damit aber rechnen zu können, kann ich jetzt hier nicht sagen: Element = Element + 100, das funktioniert nicht, ich muss mir jetzt wirklich erst eine Zahl holen, dass ich sage, ja, ich brauche dann einen Wert. und der Wert ist das aktuelle Element, betrachtet als Integer. Und dann darf ich sagen, wert = wert + 100 und die Aufgabe war, in einem println diesen wert dann auch auszugeben, dann wollen wir das auch machen, Und wenn wir uns dann hier zur Laufzeit mal das Ganze anschauen, dann sehen wir, nur für die Integers 1, 2, 3, 4 wurde plus 100 addiert, sprich 101 bis 104, auch diese Ausgabe hier gemacht. Nun sieht das Ganze natürlich sehr mächtig aus, und wir können doch hergehen, uns das Ganze mal in einen Kommentarblock setzen, weil die Frage ist, dürfen wir so was nicht einfacher machen? Swift soll doch elegant sein (lacht), und in der Tat können wir das sehr stark vereinfachen. indem wir sagen: Was wäre, wenn unsere Variable wert das Element wäre, aber als Integer? Wir machen uns eine Variable wert die soll den Wert vom Element enthalten, aber nur - und hier wichtig: das Fragezeichen - aber nur wenn das Element auch wirklich ein Integer ist. Ja, das ist ja wohl genial, und dann dürfen wir die zwei Zeilen hier nämlich gerne duplizieren, und dürfen mit dem Wert rechnen, und dürfen dann den Wert ausgeben, und auch das funktioniert einwandfrei. Das heißt, wir haben mit unserem is, wo wir etwas casten, wo wir sagen, ich hätte gerne das Element, aber jetzt bitte als konkreten Integer, auch noch die Möglichkeit, es quasi über ein optional abzufahren, und nur wenn Element als Integer betrachtet einen Wert hätte, sprich, wenn es ein gültiger Integer ist, dann haben wir diese Variable geschaffen, if var geht genauso wie if let, nur mit let darf ich eben den Wert nicht mehr verändern, weil er dann ja innerhalb dieses Blocks hier als konstant anzusehen ist, deshalb if var: if var wert = Element as? Int und wir müssen nicht erst abprüfen, haben wir ein Element, und ist das ein Int, und machen uns dann eine Variable von dem Element als Int, sondern bringen das einfach in ein Statement zusammen. Swift ist eine kompakte Sprache, erlaubt es in wenigen, ja, Begriffen, komplexe Sachverhalte auszudrücken, und der Code, der entsteht, der ist einfach, der ist lesbar, er ist wartbar, auch über Jahre hinaus, und deshalb ist Swift so unheimlich spannend. Also: hier casten und prüfen, Any als Joker, und wir können doch immer konkret feststellen, was Sache ist, und natürlich dürfen wir auch ein Any downcasten zu einem bestimmten Typ, um dann damit zu rechnen, wenn es denn Strings wären, um das Wort umzudrehen, oder neue Wörter anzuhängen, und so weiter und so weiter. Sehr einfach, sehr elegant, Swift ist sexy.

Swift 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...
 
Hersteller:
Exklusiv für Abo-Kunden
Ihr(e) Trainer:
Erscheinungsdatum:10.11.2014
Laufzeit:4 Std. 2 min (30 Videos)

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!