Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Swift lernen

Komplexe Definitionen erst bei Bedarf ausführen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Eine Klasse kann eine Menge von Variablen anbieten, wobei nicht immer alle sofort definiert werden müssen. Definitionen, die lange dauern, können über das Schlüsselwort lazy verschoben werden, bis der erste Zugriff darauf erfolgt.
06:05

Transkript

Es gibt in Swift ein Konzept der sogenannten "Lazy Properties", wenn wir also Funktionen aufrufen, die eine ganze Weile unterwegs sind, entweder weil sie einen Webserver kontaktieren, oder eine komplizierte Berechnung machen, wir diese Werte aber wirklich nur haben müssen, sollte auch jemand Interesse an so einer Property haben, dann können wir das Ganze wunderbar entkoppeln, damit nicht unnötig hier Rechenlast produziert wird für Ergebnisse, die sich im Moment niemand anschauen möchte. Das klären wir also in diesem Video, und wir steigen hier ein, mit unseren Lazy Properties, das ist dann unser Weg dahin. So, Lazy Properties soll unser Playground heißen, und wir legen den ganz normal hier in unseren Projektdateien ab, und kommen dann schon zu einer ersten einfachen Funktion, und das ist unser Renderprozess, wir wollen also Bilder rendern, natürlich simulieren wir das Ganze hier nur, 'println("wir rechnen, und rechnen, und haben viel zu tun")', denn so ein Bild zu rendern, ist ja wirklich eine ganz aufwändige Geschichte. Dann haben wir hier eine Klasse, und diese Klasse könnte ja unsere Bildverarbeitung durchaus sein, und was haben wir in unserer Bildverarbeitung? Da haben wir ein paar Variablen, so etwas wie 'punkte', ja, und 'punkte' soll dann sein, ein Array von Doubles, das können wir natürlich hier so definieren, und da können wir ja auch gleich einen Wert mitgeben, 1.2, und was weiß denn ich, 4.7, so, dann haben wir hier unsere 'punkte', und dann haben wir noch 'farben', in denen wir das Ganze darstellen lassen wollen, hier verlassen wir uns mal auf die Type Inference, und wir haben eben "rot" und "blau" und "gruen", bekommen also ein Array von Strings hier geliefert, aber, worum es uns geht an dieser Stelle, ist, dass wir auch eine Variable haben hier, für unseren Renderprozess, und das Ergebnis soll eben sein, was unser Renderprozess hier liefert, vielleicht ein Integer, und das ist dann die Zahl 42, Das ist ja immer ein richtiges Ergebnis, und wir sagen dann, 'render' wäre gleich das Ergebnis von diesem Funktionsaufruf renderprozess. Wenn ich dann an dieser Stelle hergehe, wir haben eine Klasse Bildverarbeitung, und wir haben ein paar Properties eingefügt, Klassenattribute, alle sind sauber initialisiert, das heißt, ich bin nicht zwingend verpflichtet, hier jetzt einen Initializer zu schreiben, dann darf ich aber hergehen, und uns jederzeit hier eine Bildverarbeitung anlegen, indem wir von unserer Klasse Bildverarbeitung eine Instanz aufbauen. Und wir sehen jetzt ganz klar, aha, wenn ich diese Bildverarbeitung habe, und will dann von der Bildverarbeitung mal die Punkte ausgeben, wunderbar, dann haben wir die Punkte, will ich die Farben ausgeben, dann sehen wir auch die Farben, und natürlich, wenn ich unseren Renderprozess mir hier anschauen will, das Ergebnis davon, dann sehen wir da die Zahl 42. Alles soweit einfach, wunderbar, aber - schon in dem Moment, wo ich eine Instanz der Klasse Bildverarbeitung mir hier erzeuge, wird ja diese Funktion gerufen. Nun will ich das Bild vielleicht gar nicht rendern, ja, denn das dauert ja sehr sehr lange, wie wir hier sehen, und das Bild soll eben wirklich nur auf Bedarf, auch dieser Renderprozess soll nur angestoßen werden, wenn es wirklich nötig ist. Nun könnten wir natürlich sagen, okay, die Variable 'render', die machen wir optional, und dann könnte ich ja prüfen, wenn sie null ist, erst dann rufen wir diesen Prozess auf, aber genau das nimmt uns doch Swift schon alles ab. denn wir haben hier die Möglichkeit, das Ganze "lazy" zu machen, also verzögert, und zwar clever verzögert, und sehen Sie mal hier, in dem Moment, wo ich das Kennwort, das Keyword 'lazy' hier davor schreibe, verschwindet also tatsächlich schon die Ausgabe in unserem Playground, dass wir hier umständlich gerechnet haben, aber dennoch haben wir eine Bildverarbeitung gemacht, und wir können uns die Punkte ausgeben lassen, wir können uns die Farben ausgeben lassen, aber erst, wenn wir die Ausgabe des Renderprozesses hier wirklich brauchen. Genau an dieser Stelle wird dann auch diese Funktion aufgerufen, das heißt, 'lazy' kümmert sich darum erst beim Zugriff auf eine Property, dann eben auch einen Prozess oder was auch immer zu starten, und zwar genau dann, wenn wir es brauchen, sollten wir in dieser Instanz der Bildverarbeitung niemals uns für das Ergebnis des Renderprozesses interessieren, ja, dann brauchen wir auch keine Rechenzeit zu verschwenden. Lazy Instantiation von Variablen ist hier das Stichwort, und Swift bietet uns dafür fantastische Möglichkeiten.

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!