Swift lernen

Swift ist objektorientiert: Eine erste Klasse entsteht

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Das Beispiel eines einfachen Rechtecks stellt Klassen, Initialisierer und Methoden vor und beleuchtet, wie das alles zusammenarbeitet.
08:57

Transkript

In diesem Video beschäftigen wir uns mit Klassen, denn das ist es ja, worum es in der objektorientierten Programmierung geht, und selbstverständlich ist Swift eine Sprache, die die Objektorientierung ganz stark unterstützt, So haben wir also da auch eine Menge Konstrukte, und da steigen wir dann auch gleich ein. Wir machen uns einen neuen Playground zum Thema "Klassen", und dann geht's auch gleich los. Ja, wie definiert man nun Klassen in Swift? Zunächst einmal für die, die noch aus der Objective-C Welt kommen: viel, viel einfacher als damals, denn wir müssen nicht mehr alles trennen, zwischen einer Header- und einer Implementation-Datei, sondern wir haben eben wirklich alles zusammen, so wie man es von anderen modernen Sprachen schon eine ganze Weile kennt, also haben wir eine Klasse für unser Rechteck. So muss man sich das halt vorstellen, dass das Rechteck jetzt ein Bauplan ist, beispielsweise für ein Haus, aber erst wenn ich dann aus diesem Bauplan heraus auch wirklich ein Haus mir habe bauen lassen, wenn ich ein Objekt habe, wir sagen dann auch, eine Instanz, dann kann ich eben erst wirklich damit arbeiten. Das heißt, das, was wir jetzt hier definieren, in dieser Klasse, ist wirklich die Eigenschaft, die dann später ein Objekt der Klasse Rechteck haben wird. So, was soll denn unser Rechteck haben? Unser Rechteck soll Variablen haben, und da wollen wir so etwas wie eine laenge, und wir machen uns das einfach, und arbeiten mit Integern, und eine breite. Und in dem Moment, wo wir hier diese Variablen anlegen, ist natürlich Folgendes gegeben, in anderen Sprachen sagt man dazu dann auch "properties", und, ja, für die, die aus Objective-C kommen, irgendein synthesize oder ein magisches Unterstrich und sonst wie Gerät, das brauchen wir hier alles nicht mehr, Getter und Setter auch nicht, es ist schon alles erledigt, wir haben damit von außen zugängliche properties, laenge und breite, für unser Rechteck geschaffen. Allerdings sehen wir auch gleich, nachdem wir hier die properties definiert haben, einen Fehler, denn Swift ist ja nicht nur sehr sicher, was das Typisieren von Variablen anbelangt zur Compilezeit, Swift will natürlich gerade bei Klassen auch sicherstellen, dass jeder Wert initialisiert ist, Nun könnten wir in alter Manier hergehen, und sagen, wir haben hier so einen default, laenge = 0, breite = 0, dann ist der Compiler hier auch im Playground schon wieder zufrieden, aber eigentlich gehört es sich doch für Klassen, dass wir auf jeden Fall ein Konstrukt uns noch gleich mit anschauen müssen, nämlich einen Initialisierer. Wir müssen also einen Init noch zur Verfügung stellen, und dürfen sagen, ja, ich initialisiere ein Rechteck, und übergebe eine laenge und eine breite, jeweils vom Typ Integer, und jetzt ist die Frage, wie kann ich denn meiner property dieses Argument zuweisen, wenn ich sage, laenge = laenge, na ja, dann weiß er natürlich nicht, was da zu tun ist, meinen wir die, meinen wir die? Und an dieser Stelle taucht dann noch einmal ein Keyword auf, nämlich dieses self, ein Bezug auf sich selbst, auf die aktuelle, zu schaffende Instanz, und dann darf ich die Parameter im Initialisierer auch genau so nennen, wie die properties heißen, und ich muss nicht --laenge oder --breite oder irgendwas mit Unterstrich machen, so ist das Ganze sehr sauber, und auch hier, wenn denn Rechteck einen Initialisierer hat, der alle Variablen berücksichtigt, dann ist auch der Compiler zufrieden. Und das Schöne ist, so eine Klasse darf natürlich auch Funktionen haben, das ist ja die Idee in der objektorientierten Programmierung, dass man die Properties, Attribute in Variablen, um nur diese Begriffe alle mal zu nennen, die zu einer bestimmten Instanz gehören, zusammen mit den Methoden vereinbart, die dann diese Properties auch ja letztendlich massieren, oder auf richtige Werte setzen, das ist ja schon im Prinzip alles, also, wir haben hier eine Klasse, wir haben einen Initialisierer, und wir machen noch eine Funktion, und sagen, wir bieten auch die flaeche, dieses Rechtecks nach außen hin an, Diese Funktion bekommt kein Argument, liefert uns aber einen Integer, und die Fläche eines Rechtecks ist immer noch die Länge mal Breite. Und das Schöne ist, wir brauchen hier nicht mehr zwingend dieses self, sondern es ist völlig klar, laenge kann nur unsere Property sein, die wir hier der Klasse mitgeben haben. So haben wir also in Swift eine erste einfache Klasse einmal erzeugt, und wie arbeitet man nun damit, wir hatten ja gesagt, okay, wenn jetzt Rechteck der Bauplan ist, irgendwann muss ich mir davon auch ein Objekt bauen lassen, ich brauche ein bisschen Grundstück, sprich Arbeitsspeicher, und ich muss diesen Initialisierer ausführen, und das Ganze ist in Swift wunderbar einfach, das wir eben sagen dürfen, ich hab hier eine Variable, und das wäre dann ein Rechteck, und es soll sein aus der Klasse Rechteck, eben der Initialisierer, mit der Länge 5 und der Breite 5, und dann darf ich auch das Ganze durchaus richtig schreiben, zum einen, und zum anderen darf ich dann von unserem Rechteck auch gerne die Fläche aufrufen, und 5 mal 5 ist eben immer noch 25. Also, ein minimales Konstrukt hier, um eine Klasse zu erzeugen, selbstverständlich darf auch jede Instanz - ein Rechteck wäre, nachdem diese Zeile durchgeführt wird, eine Instanz der Klasse Rechteck, jede Instanz darf nicht nur Variablen besitzen, Properties dürfen auch Konstanten sein, das ist keine Frage, aber in der Regel haben wir eine Handvoll Properties in Form von Variablen, dann müssen wir in einem Initialisierer auch sicherstellen, dass diese Variablen auch alle initialisiert werden, und erst dann haben wir Funktionen zur Verfügung. Und so was wie Alloc und Init, um uns um den Speicherhaushalt zu kümmern, das gehört der Vergangenheit an, in Swift ist das alles viel, viel einfacher. Wir dürfen uns auch durchaus noch etwas mehr Komfort gönnen, nämlich sogenannte "Convenience-Initialisierer", dürfen wir auch noch angeben, und ich darf also sagen, da gibt es einen auch ohne Argumente, und was soll er machen, er soll eben ein Init ausführen, und übergibt für die Länge den Standardwert 1, und für die Breite auch den Standardwert 1, und dann haben wir die Möglichkeit, uns hier unten auch ein Rechteck zu machen, ohne dass wir die Länge und Breite gleich angeben, denn an dieser Stelle wird dann unser Convenience-Initializer aufgerufen, der eben hier keine Argumente hat, die Bedingung ist aber, dass so ein Convenience-Initializer auf jeden Fall einen sogenannten "Designated Initializer" aufrufen muss. Designated ist allerdings kein Wort, was wir hier hinschreiben müssen, aber es gilt in Swift, dass eine Klasse beliebig viele Designated- und Convenience-Initializer haben darf, wohingegen die Convenience Initializer nur bestimmte Designated Initializer wiederum aufrufen dürfen. So, das ist also die Definition hier einer einfachen Klasse in Swift.

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!