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

Swift lernen

Strukturen als "Objekte ohne Vererbung"

Testen Sie unsere 2016 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Strukturen sind in Swift sehr mächtig. Array und Dictionary, aber auch Datentypen wie Int, Double oder Bool sind als Struktur realisiert.
10:30

Transkript

Strukturen bereichern die Funktionalität der Sprache Swift, und es ist ganz erstaunlich, was Strukturen im Vergleich zu anderen C-basierten Sprachen in Swift bieten, was genau, das schauen wir uns hier in diesem Video an. Ein neuer Playground zum Thema Strukturen, und dann werden wir hier gleich uns mit diesem Thema beschäftigen. Machen wir uns zunächst eine einfache Struktur, dass wir uns mit der Syntax einmal auseinandersetzen, wir machen also eine Struktur namens Simple, und wir gehen in dieser Struktur her, und sagen, ja, wir haben da eine Variable, die Variable wäre ein value, und das darf auch gerne ein Integer sein, und den setzen wir auf 42. Das haben wir so schon bei Classes gesehen, und in der Tat sind Strukturen sehr sehr ähnlich auch zu Klassen. Und Strukturen sind in Swift unheimlich mächtig. Selbst diese Datentypen, Int, Float, Double, Bool, aber auch String, Array und Dictionary, sind in Swift als Strukturen angelegt. Das mag jetzt den einen oder anderen überraschen, aber es ist tatsächlich so, und wir haben also im Vergleich zu Objekten eigentlich nur einen wesentlichen Unterschied, Strukturen werden als Wert übergeben, wenn wir Funktionen aufrufen, und Objekte werden als Referenz übergeben. Was das genau bedeutet, schauen wir uns jetzt einmal an. Wir machen uns eine Funktion, die wir da change nennen wollen, und das was wir ändern möchten, ist eine Variable, und zwar ein kleines simple von unserem neuen Datentyp Simple. Und das was wir eben machen werden, ist sagen: Simple, du hast doch einen value, weißt du was, da addieren wir noch mal 10 Punkte hinzu. Wie legen wir uns von einer Struktur eine Variable an, wenn wir mit der arbeiten wollen, aus das ist sehr sehr einfach, wir haben eben hier dann unseren - oder ourSimple, wenn wir hier im englischen Sprachgebrauch sind, ourSimple, soll jetzt sein von dieser Struktur Simple bitte ein neues Objekt, wenn wir so wollen, wir können dann ja von unserem Simple auch den value jederzeit noch mal hier im Storyboard ausgeben, und sehen, aha, das ist also der Wert 42. Wenn wir jetzt unsere Funktion change aufrufen, und sagen, wir übergeben hier unsere Simple-Geschichte, und lassen uns danach noch einmal den value ausgeben, dann hat sich auch in der Tat nichts verändert, denn wir haben ja hier simple als Variable übergeben, nur insofern als Variable auch maskiert, als dass wir dann hier mit dem Wert auch arbeiten können, und wir erhöhen halt von unserem übergebenen Objekt wenn wir so wollen, den Wert um 10. Nur um das zu verdeutlichen, was ich eingangs gesagt habe, dieser Unterschied zwischen Call-by-value und Call-by-reference, ist jetzt der, ist jetzt der, machen wir aus der Struktur eine Klasse, tatsächlich nur, indem wir unser Keyword struct durch das Keyword class ersetzen, dann fällt uns sofort auf, oh, da gibt's aber einen Unterschied, nach dem Aufruf von change hat unser simple.value jetzt den Wert von 52. Und das ist der entscheidende Unterschied, In dem Moment, wenn ich wirklich ein Objekt habe, das heißt, die Instanz einer Klasse, dann werden diese Objekte als Referenz übergeben, so, als wären es inout Parameter, das ist so. Habe ich aber eine Struktur, dann werden die Werte als Wertekopie übergeben, und was auch immer der Empfänger damit macht, er kann ändern, was er möchte, wird unser Original nicht beeinflussen. Also, das ist sehr sehr wichtig, und deshalb betone ich es noch ein Mal: In Swift sind Strukturen ähnlich leistungsfähig wie Klassen, das ist eine Alleinstellung von Swift, Interne Datentypen wie Int, Float, Double, Bool, aber auch String, Array und Dictionary, die uns Swift bietet, sind bereits als Strukturen implementiert, das heißt, immer wenn ich einen Int übergebe, aber auch immer, wenn ich ein Array übergebe oder ein Dictionary, wird immer eine Kopie übergeben, und nicht eine Referenz. Das heißt, der Empfänger kann mit der empfangenen Struktur durchaus Änderungen vornehmen, es beeinflusst nicht den Sender. Es ist immer nur eine Kopie. Swift bemüht sich natürlich, seitens des Compilers, Unnötiges zu kopieren zu vermeiden, wenn also festgestellt wird, diese Methode, die gerufen wird, schreibt nicht und ändert nicht den übergebenen Wert, dann wird auch keine Kopie erzeugt, denn, das können wir uns sehr leicht vorstellen, da geht viel Speicher und vor allen Dingen auch Rechenzeit dafür verloren, um umfangreiche Strukturen permanent als Kopie durch die Gegend zu schicken. Aber es ist so, Strukturen werden als Wertekopie Call-by-value übergeben, und Klassen, sprich Instanzen und Objekte, als Referenz, und hier durch dieses Beispiel, glaube ich, kann man das sehr sehr schön deutlich machen, haben wir unser Simple als Klasse, und rufen dann unser change auf, und was so ein Simple bekommt, und der Wert ändert sich, dann ist auch tatsächlich der Wert unserer Instanz, unseres Objekts geändert, haben wir eine Struktur, geht nur die Kopie auf die Reise, und das ändert eben nichts. Ganz ganz wichtiges Thema. So, wollen wir uns doch jetzt hier etwas weiter beschäftigen mit unserer Struktur. Wie sieht denn die Syntax aus, was bietet sich da noch an, was können wir tun? Wir können zum Beispiel eine Struktur Kunde machen, und ein Kunde, der hat also einen Vornamen, das wäre dann ein String, und den dürfen wir auch Vorbelegen, wenn wir das möchten, hier Not named im Moment, und wir haben auch einen Nachnamen, auch das könnte ein String sein, oder sollte normalerweise sein, Not named, und wir können auch Funktionen schreiben, innerhalb von Strukturen, Strukturen sind eben in Swift extrem mächtig, das heißt, wir haben eine Funktion, die heißt dann Ausgabe, und unsere Ausgabe würde eben sagen, println("Ich bin der Kunde"), und wir greifen auf unsere Variablen zu, über die String-Interpolation Vorname, Nachname, und hätten das dann hier an dieser Stelle schon erledigt. So. An diesem Punkt haben wir also eine Struktur Kunde, mit zwei Properties und einer Funktion, und damit dürfen wir auch sehr einfach arbeiten, ich zieh das jetzt hier mal nach oben, das wir hier ein bisschen Übersicht gewinnen, und dann haben wir hier also die Möglichkeit zu sagen, aha, Variable einKunde =, und jetzt wird es spannend, denn für eine Struktur stellt uns der Compiler automatisch einen Initialisierer zur Verfügung, der alle Parameter auflistet, hier für die Properties, damit wir Werte übergeben können. Haben wir Kunde als class definiert, auch das wäre denkbar, bleibt uns nur der default-Initializer, wir haben ja noch keinen geschrieben. Also, Strukturen besitzen einen sogenannten memberwise initializer, jeder Member, jedes Property kann hier angegeben werden, und wir haben dann unseren Willi Testkunde wieder einmal erzeugt, und natürlich dürfen wir auch den Kunden ausgeben, und wir sehen dann, "Ich bin der Kunde Willi Testkunde", also auch diese Funktion auf einer Struktur wird aufgerufen. Ja, ganz ganz wichtig, Strukturen, sind in Swift ein Dreh- und Angelpunkt, interne Typen sind als Strukturen definiert, Werte werden über Strukturen immer als value übergeben, nicht als Referenz, und Strukturen sind im Wesentlichen genauso leistungsfähig wie Klassen, eins fehlt allerdings, Strukturen dürfen nicht an der Vererbung teilnehmen, an objektorientierten Hierarchien, ich darf eine Struktur nicht von einer anderen, oder von einer Klasse ableiten, das ist dann eben hier die Limitierung.

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...
 

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!