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

Swift lernen

Klassen und Strukturen auch ohne deren Quelltext erweitern

Testen Sie unsere 2016 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Die mitgelieferten Klassen und Strukturen von Swift können um Funktionen und Methoden erweitert werden, auch wenn der Quelltext nicht zur Verfügung steht.
08:45

Transkript

Extensions stellen eine geradezu magische Funktionalität in Swift zur Verfügung, und das wollen wir uns hier gemeinsam anschauen. Wir dürfen nämlich tatsächlich vorhandene Klassen, Strukturen und auch Enumerations jederzeit erweitern. auch wenn wir den Quelltext nicht zur Verfügung haben. Nun wollen wir doch einmal uns mit der Ausgabe von Zahlen beschäftigen, und die ein bisschen formatiert darstellen. Also habe ich zum Beispiel einen Preis, und der Preis beträgt 1234 Euro und 45 Cent. Nun wenn wir diesen Preis einfach so ausgeben, dann ist das schon sehr nett hier von dem Playground, dass unser Wert quasi formatiert wird, Normalerweise, wenn wir uns dann im Programmieren für OS 10 oder iOS befinden, wird es aber so ausgegeben. Und abgesehen davon reicht uns das nicht, denn unser Preis soll doch bitte auch eine Währung beinhalten. Nun werden wir ein bisschen Code einmal aufschreiben, der es ermöglicht, über einen sogenannten Numberformatter, das ist eine Klasse aus der Foundation-Bibliothek, die wir zur Verfügung haben, weil wir hier unser UIKit importiert haben, so eine Klasse, mit der wir die Zahl hübsch formatieren können. Also, was brauchen wir? Wir hätten gerne einen Formatter, und dieser Formatter ist also ein NSNumberFormatter. Dann können wir diesem Formatter auch einen numberStyle setzen, und das wäre dann ein NSNumberFormatterStyle. CurrencyStyle, und das wäre dann ein NSNumberFormatterStyle. CurrencyStyle, wir wollen ja eine Währung ausgeben, und wir wissen auch, das dürfen wir dann hier in Swift abkürzen, da bleibt der Code schön kompakt. Jetzt haben wir schon soweit alles beisammen, und wir können dann diesen Preis hier als String formatiert ausgeben, indem wir sagen, lieber Formatter, gib uns doch einen String einer Zahl, und wir sehen hier noch ein kleines Problem, denn diese Zahl muss dann sein eine NSNumber Also - und kein Double - Also müssen wir uns aus unserem Double noch schnell ein NSNumber bauen, das dürfen wir gerne tun, indem wir sagen, wir haben hier eine NSNumber, und sie kommt aus einem Double, und das wäre unser Preis. Und jetzt sehen wir hier schon die Ausgabe, aha, Dollar 1234 und 45 Cent. Warum Some? Nun, String from Number liefert ja nur einen String, wenn das Ganze auch funktioniert, ist also optional, wir wollen uns hier festlegen, dass es funktioniert, ich füge also noch ein Ausrufezeichen ein, damit ist es ja nicht mehr optional, sondern wir haben ja diesen Unwrap-Vorgang hier erzwungen, und damit bekommen wir einen schönen String. Gut, das System an der Stelle arbeitet eben mit der default locale USA, gefällt uns nicht, dann werden wir das eben auch noch ändern, und sagen, Formatter, du hast eine locale, und das ist eine NSLocale, da gibt es also eine Klasse dafür, und die hat einen Local Identifier, und wenn wir hier vorgeben "DE_de", dann haben wir auch das Ganze hier für unseren Sprachgebrauch, nämlich mit Tausender-Punkt als Trenner, Dezimalkomma und mit Euro als Währung. Ja, und nun sieht man, das ist ja ein schöner Block, aber den jedes mal tippen zu müssen,nur um einen Preis formatiert ausgeben zu können, das wäre natürlich, ja, im wahrsten Sinne des Wortes ein hoher Preis, den wir zahlen müssten als Entwickler, und deshalb wird es jetzt magisch. Es wird geradezu fantastisch, denn - Double ist ja in Swift definiert als eine Struktur, und wir dürfen Strukturen, Klassen und Enumeration jederzeit erweitern. Wir machen uns also eine Extension der Struktur Double, obwohl wir den Quelltext nicht haben, den hat ja nur Apple, und wir schaffen uns eine Funktion asCurrency, wir wollen also unseren Wert als Währungs-String ausgeben. Also eine Funktion, die kein Argument bekommt, aber einen String liefert, und wir werden das hier alles da einpacken, werden dann das hier auch zurückgeben, haben an der Stelle nur ein kleines Problem, dass wir hier, wo der Preis steht, natürlich wissen müssen, was ist denn für uns als String auszugeben. Wir erweitern die Struktur Double, also ist ja self der aktuelle Wert, den so ein Double hat. Und in dem Moment, wo wir unseren Double hier mit einer Extension versehen haben, ab diesem Moment dürfen wir sagen: preis.asCurrency() und wir bekommen unseren wunderbaren String zurück, und wenn x irgendein anderer Wert wäre, und dann dürfen wir auch x als Currency formatiert ausgeben. Also, Extension erlaubt es, wirklich vorhandene Klassen, Strukturen und Enumeration jederzeit mit neuen Funktionen anzureichern, die dann quasi native zur Verfügung stehen, so als hätte Apple die Struktur Double schon immer mit einem asCurrency versehen. Das ist wirklich eine großartige Sache, auch hier geht natürlich mit der großen Kraft eine große Verantwortung einher, denn wenn Apple in einem späteren Release sagen würde, ja, asCurrency, das fügen wir ein, dann ist es in der Tat ein Problem, denn ich darf nicht etwas überschreiben, was eine Basis-Klasse oder Struktur dann schon mitbringen würde, Aber, gut - es ist halt immer ein gewisser Preis zu zahlen, und man kann dem Ganzen aus dem Weg gehen, indem man dort einen eigenen Prefix wählt, wie zum Beispiel ein Kürzel einer Firma, oder was auch immer hier dann - jsm.asCurrency, oder die Kürzel des Entwicklers fj.asCurrency, um halt zu vermeiden, dass es zu einem Crash kommt, wenn Apple eben die Sprache Swift auch erweitert. Dennoch stellen Extensions eine ganz erhebliche Vereinfachung dar, und man darf sich hier der Entwicklergemeinde nur anschließen, diese Features soll man auch unbedingt nutzen, denn es schafft sehr sehr übersichtliche Programme. Wichtig ist es natürlich dann, Kollegen und Kolleginnen, die neu ins Team kommen, auch zur Verfügung zu stellen, "Pass mal auf, bei uns im Haus, wir haben hier eine Bibliothek von Extensions, wir können mit den verschiedenen Elementen zusätzlich zur Sprachdefinition von Apple das und das und das noch alles machen", denn wenn jemand nur diesen Quelltext liest, er würde sich ja auf die Suche begeben, asCurrency, verflixt, wo hat denn Apple das dokumentiert, in der Tat muss man dafür dann selber sorgen. Aber, tolles Feature, Erweiterungen, Extensions sind in Swift möglich, und, ja, die Ergebnisse geradezu magisch.

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!