Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Swift
Code

Eine Einführung in die Swift: Teil 1

by
Difficulty:BeginnerLength:LongLanguages:

German (Deutsch) translation by Katharina Nevolina (you can also view the original English article)

Auf der WWDC 2014 hat Apple aus Sicht des Entwicklers eines der größten Updates für iOS seit 2008 vorgestellt. Sie haben HomeKit, HealthKit, CloudKit und Extensions eingeführt, um nur einige zu nennen.  Die größte Überraschung der WWDC 2014 war jedoch die Einführung einer neuen Programmiersprache, Swift. 

Swift ist eine wundervolle Programmiersprache, die von Grund auf aufgebaut wurde, um effizient und sicher zu sein.  Es verwendet dieselben APIs wie Objective-C.  Oder was Sie in Objective-C tun können, können Sie in Swift tun.  Es führt auch einige neue Konzepte ein, die langjährige Programmierer schätzen werden und von denen ich einige in dieser einführenden Serie über Swift behandeln werde.

In dieser Serie werde ich davon ausgehen, dass Sie bereits mit Objective-C vertraut sind.  Im ersten Artikel dieser Serie spreche ich über Swifts Philosophie, Dateistruktur und Syntax.  Im zweiten Artikel zoome ich weiterführende Aspekte der Swift-Syntax wie Optionen und Speicherverwaltung.  Halten Sie sich an Ihre Hüte, Leute, es wird ein doozy.

1. Philosophie

Um Swift besser zu verstehen, hat Apple uns in den letzten Jahren mit strukturellen Verbesserungen in Objective-C versehen.  Objective-C-Verbesserungen wie Codeblöcke, literale Array- und Wörterbuchdefinitionen und ARC (Automatic Reference Counting) sind nur ein paar Dinge, die Apple Objective-C hinzugefügt hat, um den Übergang zu Swift zu erleichtern.

Eine wichtige Säule der Swift-Philosophie ist die Code-Initialisierung.  Alle Objekte und Variablen, die in Swift definiert sind, müssen im Code initialisiert werden.  Ein nicht initialisiertes Objekt oder eine nicht initialisierte Variable führt zu einem Kompilierungsfehler in Swift.  Es stellt sicher, dass ein Objekt oder eine Variable immer einen Wert hat.  Es gibt einen speziellen Fall in Swift, wenn ein Anfangswert nicht definiert werden kann.  In diesem speziellen Fall wird Ihre Variable als optional bezeichnet.  Wir werden im zweiten Teil dieser Serie Optionen behandeln.

Ein weiterer wichtiger Pfeiler ist die Vollständigkeit der Branche.  Alle bedingten Zweige, sei es if oder switch/case, müssen alle Bedingungen abdecken.  Auf diese Weise kann kein Code durchfallen, ohne dass er abgedeckt wird.  Das Fehlen einer Bedingung in Ihrer Verzweigungsanweisung wird abgefangen und generiert einen Kompilierzeitfehler.

Ein letztes Element von Swifts Philosophie ist die Bevorzugung von Konstanten gegenüber Variablen.  Swift definiert Variablen und Konstanten folgendermaßen: 

Im obigen Beispiel wird das  let Schlüsselwort verwendet, um eine Konstante zu definieren, und das var Variablenschlüsselwort definiert eine Variable.  Um diese Definition zu vereinfachen, empfiehlt Apple die Verwendung von Konstanten, wann immer das möglich ist.  Das führt zu einem sichereren Code in einer Multi-Thread-Umgebung und einer besseren Code-Optimierung.

Jetzt gibt es für Swift viel mehr als nur ein paar Syntax- und Formatierungsverbesserungen.  Swift wurde von Grund auf neu entwickelt, um viele gängige C/C++ - und inhärent Objective-C-Absturzquellen zu beheben.  Probleme wie:

  • Out-of-Bound-Indizes in Arraysnicht 
  • initialisierte Daten
  • ungeprüfte Rückgabetypen
  • Ungeprüfter Zeigerzugriffimpliziter Fall durch
  • impliziter Fall durch
  • Fehlern goto

Als jemand, der sowohl für iOS als auch für Android programmiert, weiß ich aus erster Hand, wie viel mehr Spaß die Programmierung für die iOS-Plattform wirklich mit Cocoa und UIKit macht.  Diese Serie wird Ihnen zeigen, wie viel mehr Spaß am Programmieren ist, wenn Sie Swift zum Mix hinzufügen.

2. Dateistruktur

In Objective-C haben wir Header-Dateien (.h) und implementation-Dateien (.m).  Das ist etwas, das Objective-C von der C-Sprache geerbt hat.

In Swift wird eine Klasse in einer einzelnen Implementierungsdatei (.swift) definiert, die alle Definitionen und Implementierungen der Klasse enthält.  Das erinnert an andere Sprachen wie Java und C#.

Die Notwendigkeit, Header-Dateien zu jonglieren und den lästigen #IFNDEF am Anfang der Header-Dateien hinzuzufügen, ist vorbei.

3. Syntax

Das erste, was Sie an Swift bemerken werden, ist das Verschwinden des Semikolons am Ende jeder Anweisung. In Swift wird jede Zeile als Anweisung betrachtet und wir müssen kein Semikolon am Ende jeder Zeile hinzufügen.

Ich betone die Notwendigkeit, denn nichts hindert Sie daran, am Ende Ihrer Anweisungen Semikolons hinzuzufügen.  Ich werde weiterhin Semikolons am Ende jeder Anweisung hinzufügen, da dies meiner Meinung nach die Lesbarkeit erhöht.  Außerdem ist es wirklich schwierig, die Gewohnheit, Semikolons hinzuzufügen, wie Cocoa-Entwickler es seit Jahren getan haben, loszuwerden.

Eine weitere wichtige Änderung in Swift ist, dass geschweifte Klammern obligatorisch für if-Anweisungen sind.  Das bedeutet keine Heartbleed Bugs mehr.

Syntax kann ein komplexes Thema sein, über das geschrieben werden kann.  Swift hat viele Feinheiten, die sehr lange dauern können, aber das ist nicht das Ziel dieses Artikels.  Um kurz, zu sein, möchte ich mich darauf konzentrieren, was die Objective-C-Entwickler bemerkt hätten.

4. Ähnlichkeiten mit Objective-C

Ich beginne damit, Ihnen drei Codeschnipsel zu zeigen, die einige Ähnlichkeiten mit Objective-C veranschaulichen.  Es wird Ihnen beim Verständnis der Swift-Sprache helfen.

Objective-C-Programmierer werden feststellen, dass Swift dieselben Branch- und Iterationsanweisungen enthält, die Sie bereits kennen, wie if/else, for-Schleifen, for..in-Schleifen und switch-Anweisungen.

SWIFT enthält zwei Palette Operatoren, .. < und ..., um einen Wertebereich anzugeben. In der obigen for-Schleife verwenden wir half-closed range operator.. <, um einen Bereich von Werten zu spezifizieren, der 1, 2, 3 und 4 enthält, aber 5 ausschließt.  Der andere Bereichsoperator ist  closed range operator, .... Sie gibt einen Wertebereich an, der den Wert auf beiden Seiten des Operators für den geschlossenen Bereich enthält.  Zum Beispiel 1...5.  gibt einen Wertebereich von 1 bis 5 an, einschließlich 5.

5. Definieren von Variablen und Konstanten

Lassen Sie uns das Beispiel wiederholen, das ich Ihnen zuvor gezeigt habe.

In Swift definieren wir Konstanten mit dem let-Schlüsselwort und den Variablen mit dem var-Schlüsselwort .  Der Doppelpunkt,:, ist ein Marker zum Definieren von Typen.  Im obigen Beispiel erstellen wir eine Konstante und eine Variable vom Typ String.

Wir initialisieren auch die Konstante und die Variable mit einem String.  In Swift werden Zeichenfolgen genau wie C-Zeichenfolgen in Objective-C definiert, ihnen wird kein @ Symbol vorangestellt.

Objective-C ist eine stark typisierte Sprache, was bedeutet, dass der Typ einer Variablen oder eines Parameters immer angegeben werden muss.  Swift ist auch eine stark typisierte Sprache, aber Swift ist etwas schlauer, da der Compiler den Typ einer Variablen ableitet.  Der Compiler stellt außerdem sicher, dass ohne Ihr ausdrückliches Wissen und Eingreifen kein falsches Casting von Variablen stattfindet.

Wenn wir das obige Beispiel umschreiben, so dass Typinferenz seine Arbeit macht, sieht das Code-Snippet wie folgt aus:

Das ist viel besser und der Code ist viel sauberer.  Der Compiler ist schlau genug zu verstehen, dass someInt ein Int und someFloat ein Double ist. 

6. Saiten

Eine Möglichkeit, sich ein Bild von der Stärke einer Sprache zu machen, besteht darin, zu erforschen, wie sie mit der Manipulation von Strings umgeht.  Objective-C hat eine Menge Funktionen und Funktionen, die es uns ermöglichen, Strings besser zu handhaben als die meisten anderen Sprachen, aber sie sind von Zeit zu Zeit sehr ausführlich und verwirrend.

Beginnen wir mit einem Objective-C-Beispiel.  Um zwei Strings in Objective-C zu verketten, machen wir folgendes:

In Swift verwenden wir den Operator +, um eine Zeichenfolge an eine andere Zeichenfolge anzuhängen.  So einfach ist das.

Strings in Swift sind Unicode, was bedeutet, dass wir schreiben können:

Wir können die Zeichen einer Zeichenfolge mit einer for..in-Anweisung wiederholen, wie im folgenden Beispiel gezeigt.  Wir können eine for..in-Schleife verwenden, um auch Unicode-Strings zu iterieren.  Es ist wirklich so cool.

Eine letzte Sache, die ich über Streicher behandeln möchte, ist die String-Interpolation.  Wenn wir in Objective-C eine Zeichenfolge mit Variablen ausgeben möchten, rufen wir [NSString stringWithFormat:] auf.  In Swift können Variablen eingebettet werden.  Sehen Sie sich das folgende Beispiel an.

Um die String-Interpolation zu verwenden, umbrechen Sie den Variablen- oder Funktionsaufruf in Klammern und setzen Sie einen umgekehrten Schrägstrich davor \(expression).

7. Arrays und Wörterbücher

Array & Wörterbuch

 Als Objective-C-Programmierer kennen Sie bereits Arrays und Wörterbücher.  Swift hat auch Sammlungsklassen und fügt ihnen einige zusätzliche Funktionen hinzu.

Wie verwenden Sie Sammlungen in Swift?  In Swift heißen sie Array und Dictionary.  Das Deklarieren eines Arrays in Swift ähnelt dem Deklarieren eines Array-Literals in Objective-C, wobei eine Reihe von eckigen Klammern [ ] verwendet wird, jedoch kein vorangestelltes @ -Symbol.

Das Gleiche gilt für Wörterbücher.  Anstatt geschweifte Klammern zu verwenden, verwenden Sie jedoch eckige Klammern.

Wandlungsfähigkeit

Wenn ein Array-Objekt einem NSArray-Objekt entspricht und ein Dictionary-Objekt einem NSDictionary-Objekt entspricht, wie werden dann in Swift änderbare Arrays und Wörterbücher erstellt?

Die Antwort ist sehr einfach, deklarieren Sie das Objekt als eine Variable.  Mit anderen Worten, im vorherigen Beispiel entspricht someArray einer NSArray-Instanz und someOtherArray dem einer NSMutableArray-Instanz.  Das gilt auch für Wörterbücher.  Im vorherigen Beispiel entspricht someDictionary einer NSDictionary-Instanz und someOtherDictionary dem einer NSMutableDictionary-Instanz.  Das ist nett, oder?

Während Objective-C-Arrays und Wörterbücher nur Objekte enthalten können, können Sammlungen in Swift sowohl Objekte als auch primitive Datentypen wie Ganzzahlen und Gleitkommazahlen enthalten.  Ein weiterer wichtiger Unterschied zu Objective-C besteht darin, dass Sammlungen in Swift explizit oder durch Typinferenz zur Kompilierungszeit typisiert werden.  Durch die Angabe des Objekttyps in der Sammlung fügt Swift zusätzliche Sicherheit für diese Sammlungen hinzu.

Auch wenn wir bei der Deklaration den Typ einer Variablen weglassen können, ändert das nichts an der Tatsache, dass der Compiler den Objekten in einer Sammlung Typen zuordnet.  Die Verwendung von Typinferenz trägt dazu bei, den Code lesbar und leicht zu halten.

Wir können die zuvor deklarierten Array- und Dictionary-Objekte wie folgt neu deklarieren:

Der Compiler prüft die Sammlungen während ihrer Initialisierung und leitet den korrekten Typ ab.  Mit anderen Worten, es versteht, dass someArray und someOtherArray eine Sammlung von String-Objekten sind und someDictionary und someOtherDictionary Wörterbücher mit Schlüsseln vom Typ String und Werten vom Typ Int sind.

Sammlungsmanipulation

Das Hinzufügen eines Objekts oder eines anderen Arrays zu einem Array ist der String-Verkettung sehr ähnlich, da wir auch den Operator + verwenden.

Wörterbücher Manipulieren ist genauso einfach.

Typisierte Sammlungen

Früher habe ich erwähnt, dass Sammlungen in Swift getippt werden, aber was bedeutet das?  Wenn wir eine Auflistung definieren, die String-Objekte enthält, können Sie der Auflistung nur String-Objekte hinzufügen.  Andernfalls kann es zu einem Fehler kommen.

Schauen wir uns ein Beispiel an, um dies zu verdeutlichen.  Wir definieren eine Sammlung von Car-Objekten.  Das folgende Code-Snippet zeigt die Car-Class-Definition und ein veränderbares Array-Cars mit drei Car-Instanzen.

Hinter den Kulissen wird der Compiler den Typ des Arrays ableiten. Wenn Sie der Sammlung eine neue Car-Instanz hinzufügen möchten, können Sie einfach den Operator + wie unten gezeigt verwenden.

Das Hinzufügen eines Objekts des anderen Typs führt jedoch zu einem Fehler.

Das hat den zusätzlichen Vorteil der Typsicherheit für das Abrufen von Objekten aus Sammlungen.  Außerdem müssen keine Sammlungsobjekte mehr geworfen werden, bevor sie verwendet werden.

In unserem Beispiel hat ein Car-Objekt eine accelerate Methode.  Da eine Auflistung typisiert ist, können wir ein Element aus dem Array abrufen und sofort eine Methode für das Objekt in einer Codezeile aufrufen.  Wir müssen uns nicht um den Typ des Elements kümmern, da die Sammlung nur Car-Objekte enthält.

Um dasselbe in Objective-C mit demselben Sicherheitsniveau zu erreichen, müssten wir folgendes schreiben:

Um schließlich ein Array durchzulaufen, verwenden wir eine for..in-Schleife:

Um ein Wörterbuch durchzulaufen, verwenden wir auch eine for..in-Schleife:

Wie Sie sehen können, sind typisierte Sammlungen ein mächtiges Merkmal der Swift-Sprache.

Schlussfolgerung

Wir haben bereits einiges über die Swift-Sprache gelernt, und Sie sollten sich die Zeit nehmen, es auf sich wirken zu lassen.  Ich empfehle Ihnen, Xcode 6 so schnell wie möglich herunterzuladen und das Gelernte in diesem Artikel in Xcodes neuem Playground anzuwenden Feature.  Spielplätze lassen Ihr in Echtzeit mit Swift spielen.

Das war's für diesen Artikel.  In der nächsten Folge dieser Serie betrachten wir Tupel, Funktionen, Schließungen, Klassen und nicht zuletzt Optionale.  Außerdem erfahren Sie, wie die Speicherverwaltung in Swift funktioniert.  Bleiben Sie dran.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.