Was ist neu in Swift 4?

Swift 4 ist in den letzten Monaten in Arbeit. Wenn Sie wie ich sind, können Sie Swift Evolution folgen, um mit allen Vorschlägen und Änderungen auf dem Laufenden zu bleiben. Auch wenn Sie dies tun, ist jetzt ein guter Zeitpunkt, um alle Ergänzungen und Änderungen an der Sprache in dieser neuen Iteration zu überprüfen.

Ein Schnappschuss von Swift 4 war bereits einige Wochen vor der Ankündigung von Xcode 9 auf der WWDC 2017 verfügbar. In diesem Beitrag erfahren Sie alles über die neuen Funktionen von Swift 4 - von brandneuen APIs bis hin zu Verbesserungen der Sprachsyntax.

Sehen wir uns zunächst an, wie Sie den neuen Compiler auf Ihrem Computer installieren können.

Xcode-Setup

Es gibt zwei Möglichkeiten, Swift 4 auszuführen. Sie können entweder die Xcode 9-Betaversion installieren, wenn Sie über ein Entwicklerkonto mit Zugriff darauf verfügen, oder Sie können Xcode 8 für die Ausführung mit einem Swift 4-Snapshot einrichten. Laden Sie im ersten Fall die Beta von der Download-Seite Ihres Entwicklerkontos herunter.

Wenn Sie es vorziehen, Xcode 8 zu verwenden, besuchen Sie einfach Swift.org, um den neuesten Swift 4.0 Development-Snapshot herunterzuladen. Sobald der Download abgeschlossen ist, Doppelklick um die .pkg-Datei zu öffnen, die den Snapshot installiert. 

Wechseln Sie jetzt zu Xcode und gehen Sie zu Xcode> Toolchains> Toolchains verwalten. Wählen Sie dort den neu installierten Swift 4.0-Snapshot aus. Starten Sie Xcode neu und jetzt wird Swift 4 beim Kompilieren Ihres Projekts oder Spielplatzes verwendet. Beachten Sie, dass der gesamte in diesem Lernprogramm dargestellte Code auch in einem GitHub-Repo verfügbar ist.

Neue Eigenschaften

Werfen wir einen Blick auf die neuen Funktionen von Swift 4. Eine Einschränkung: Die Sprache befindet sich noch in der Beta-Phase und wir werden wahrscheinlich noch weitere Änderungen und Fehlerbehebungen sehen, bevor die offizielle Version veröffentlicht wird. Darüber hinaus können einige der zuletzt genehmigten Vorschläge zu diesem Zeitpunkt noch nicht umgesetzt werden. Behalten Sie daher die zukünftigen Versionshinweise im Auge, um zu sehen, was umgesetzt und behoben werden wird.

Kodierung und Dekodierung

JSON-Analyse ist eines der am meisten diskutierten Themen in der Swift-Community. Es ist großartig zu sehen, dass sich endlich jemand um die Vorschläge SE-0166 und SE-0167 kümmerte und die Idee zur Aktualisierung der Archivierungs- und Serialisierungs-APIs im Foundation-Framework vorangetrieben hat. In Swift 4 müssen Sie Ihre Klasse, Struktur oder Enumeration nicht mehr manuell analysieren oder kodieren. 

Neu Kodierbar und Dekodierbar Protokolle wurden hinzugefügt, und Sie können Ihre Klassen durch einfaches Hinzufügen an sie anpassen Codierbar (was ist ein Alias ​​für Dekodierbar & kodierbar) in die Vererbungsliste der Klasse. Dann können Sie die verwenden JSONEncoder eine Instanz der Klasse kodieren:

let wwdc = Konferenz (Name: "WWDC", Ort: "San Jose", Datum: Datum (timeIntervalSince1970: 0)) JsonEncoder = JSONEncoder () JsonEncoded = versuchen JsonEncoder.encode (Wwdc) JsonString = Zeichenfolge (Daten: jsonEncoded, Kodierung: .utf8) // "name": "WWDC", "city": "San Jose", "date": - 978307200

Wie Sie sehen, instanziieren Sie a JSONEncoder Objekt zum Konvertieren der Struktur in eine JSON-Zeichenfolgendarstellung. Es gibt einige Einstellungen, die Sie anpassen können, um das genaue JSON-Format zu erhalten, das Sie benötigen. Um beispielsweise ein benutzerdefiniertes Datumsformat festzulegen, können Sie ein angeben dateEncodingStrategy auf die folgende Weise:

Lassen Sie jsonEontailkode = JSonnackncoder () let dateFormatter = DateFormatter () dateFormatter.dateStyle = .long dateFormatter.timeStyle = .lange jsonEncoder.dateEncodingStrategy = JSONEncoder.DateEncodingStrategy.attatted (DateFormatter.timeStyle) (Daten: jsonEncoded, Kodierung: .utf8) // "Name": "WWDC", "Stadt": "San Jose", "Datum": "1. Januar 1970 um 1:00:00 GMT + 1" 

Der umgekehrte Vorgang zum Dekodieren einer Zeichenfolge funktioniert dank der JSONDecoder Klasse.

let jsonDecoder = JSONDecoder () let decodedWWDC = try jsonDecoder.decode (Conference.self, from: jsonEncoded) // 'decodedWWDC' ist bereits vom Typ Konferenz!

Wie Sie sehen, indem Sie den Typ des Objekts an den übergeben dekodieren Auf diese Weise teilen wir dem Decoder mit, welches Objekt wir von den JSON-Daten erwarten. Wenn alles erfolgreich ist, erhalten Sie eine Instanz unseres Modellobjekts, die verwendet werden kann.

Das ist noch nicht einmal die ganze Leistung und Modularität der neuen API. Anstelle einer JSONEncoder, Sie können das Neue verwenden PropertyListEncoder und PropertyListDecoder falls Sie Daten in einer plist-Datei speichern müssen. Sie können auch Ihren eigenen benutzerdefinierten Encoder und Decoder erstellen. Sie müssen nur Ihren Decoder an die anpassen Decoder und deinen Encoder zum Encoder Protokoll.

Zeichenketten

Als Teil des String Manifests wurde das String Typ erhielt auch eine große Erneuerung. Es passt sich nun wieder an (nachdem es in Swift 2 entfernt wurde) Sammlung Protokoll dank Vorschlag SE-0163. Jetzt können Sie einfach eine Zeichenfolge auflisten, um alle Zeichen zu erhalten.

let text: String = "Hallo von Tutsplus!" für ein Zeichen in text.reversed () print (Zeichen)

Unterstring ist ein neuer Typ, der dem gleichen entspricht StringProtocol zu welchem String passt auch an. Sie können ein neues erstellen Unterstring indem Sie einfach ein String. Die folgende Zeile erstellt eine Unterstring indem Sie das erste und das letzte Zeichen auslassen.

let substring = text [text.index (after: text.startIndex)… 

Eine schöne Ergänzung, die das Arbeiten mit großen Textstücken erleichtern soll, sind mehrzeilige Zeichenfolgen. Wenn Sie einen Textblock erstellen müssen, der sich über mehrere Zeilen erstreckt, mussten Sie zuvor manuell einfügen \ n überall. Das war sehr unelegant und schwer zu handhaben. Es gibt jetzt einen besseren Weg, mehrzeilige Zeichenfolgen zu schreiben, wie Sie im folgenden Beispiel sehen können:

let welcomeMessage = "" "Hallo, Willkommen bei Envato Tuts +. Wir hoffen, dass Sie Spaß daran haben, mit uns zu lernen!" ""

Es gibt wenige Regeln, die zu dieser neuen Syntax passen. Jede Zeichenfolge beginnt mit einem dreifachen Anführungszeichen ("" "). Wenn die gesamte Zeichenfolge eingerückt ist, bestimmt der Abstand der schließenden Zeichen den Abstand, der von jeder Zeile in der Zeichenfolge entfernt werden soll. Wenn das schließende Zeichen beispielsweise um zwei Tabulatoren eingerückt ist, wird der gleiche Betrag aus jeder Zeile entfernt. Wenn der String eine Zeile hat, die diesen Abstand nicht hat, gibt der Compiler einen Fehler aus.

Schlüsselpfade

In Swift 3 wurden Schlüsselpfade hinzugefügt, um das Referenzieren von Eigenschaften in einem Objekt zu erleichtern. Anstatt einen Objektschlüssel mit einem einfachen String-Literal zu referenzieren, können Sie mithilfe von Schlüsselpfaden eine Kompilierungszeitprüfung durchführen, um zu prüfen, ob ein Typ den erforderlichen Schlüssel enthält, wodurch ein allgemeiner Laufzeitfehler vermieden wird. 

Wichtige Pfade waren eine gute Ergänzung zu Swift 3, aber ihre Verwendung war auf begrenzt NSObjects und sie haben nicht wirklich gut mit structs gespielt. Dies war die Hauptmotivation hinter dem Vorschlag SE-0161, der API eine Aktualisierung zu geben.

Eine neue Syntax wurde von der Community vereinbart, um einen Schlüsselpfad anzugeben: Der Pfad wird beginnend mit a geschrieben \. Es sieht wie folgt aus:

struct Conference var name = "" let city: String let nameKeyPath = \ Conference.name let wwdc = Konferenz (Name: "WWDC", Ort: "San Jose") wwdc [keyPath: nameKeyPath] // "WWDC"

Das nameKeyPath Objekt beschreibt einen Verweis auf die Name Eigentum. Es kann dann als Index für dieses Objekt verwendet werden.

Wenn Sie die Variable von ändern Lassen zu var von wwdc, Sie können eine bestimmte Eigenschaft auch über die Schlüsselpfad-Subskriptionssyntax ändern.

wwdc [keyPath: nameKeyPath] = "AltConf" let name = wwdc [keyPath: nameKeyPath] // "AltConf"

Einseitige Bereiche

SE-0172 schlug vor, neue Präfix- und Postfix-Operatoren hinzuzufügen, um zu vermeiden, dass ein Start- oder Endindex unnötig wiederholt wird, wenn auf ihn geschlossen werden kann. Wenn Sie beispielsweise ein Array vom zweiten bis zum letzten Index tiefstellen möchten, können Sie es folgendermaßen schreiben:

lass Zahlen = [-2, -1, 0, 1, 2] Sei positiv = Zahlen [2… 

Zuvor die endIndex musste angegeben werden Nun gibt es eine kürzere Syntax:

Positiv = Zahlen [2…]

Oder, wenn Sie mit dem Startindex beginnen möchten:

sei negativ = Zahlen [… 1]

Dieselbe Syntax kann auch für den Musterabgleich in a verwendet werden Schalter Aussage.

Generische Subskripte

Vor Swift 4 mussten Indizes einen bestimmten Rückgabewerttyp definieren. SE-0148 schlug die Möglichkeit vor, einen einzelnen generischen Index zu definieren, der den Rückgabetyp basierend auf dem definierten Ergebniswert ableiten würde. Abgesehen von der Typanmerkung funktioniert es genauso wie zuvor.

struct Conferences Konferenzen lassen: [String: Any] // Gibt die Konferenzmodelle zurück, die ihren Schlüssel erhalten. Index(Schlüssel: String) -> T? Zurück Konferenzen [Schlüssel] als? T // Definieren Sie den Rückgabetyp der Variablen und greifen Sie über Subskriptionen auf das Objekt zu. lass sache: konferenz? = Konferenzen ["WWDC"]

Wie Sie sehen, verbessert dies die Lesbarkeit Ihrer Objekte in den Fällen, in denen Sie über die Indexsyntax darauf zugreifen müssen.

Klasse und Subtyp Existentials

Eine der bislang fehlenden Funktionen des Swift-Typsystems war die Möglichkeit, eine Klasse auf ein bestimmtes Protokoll zu beschränken. Dieses Problem wurde in Swift 4 behoben. Jetzt können Sie dank SE-0156 den Typ eines Objekts und die Protokolle angeben, denen es entsprechen muss. Sie können zum Beispiel eine Methode schreiben, die eine UIView das entspricht der Nachladbar Protokoll mit der folgenden Syntax:

func reload (Ansicht: UIView & nachladbar) 

Verbesserungen für Wörterbuch und Satz

Wörterbuch und einstellen Auch in Swift 4 wurde eine nette Aktualisierung vorgenommen. Sie sind dank einiger hinzugefügter Gebrauchsmethoden viel angenehmer zu bedienen.

mapValues

Wörterbuch hat jetzt ein mapValues Methode, um alle Werte zu ändern, wobei die Verwendung des Generic vermieden wird Karte Diese Methode erfordert das Arbeiten mit Schlüssel- und Wertetupeln.

Lassen Sie Konferenzen = ["WWDC": "Sehr gut", "AltConf": "Gut", "Firebase-Party": "Sehr lustig"] // Mapping über alle Werte im Wörterbuch. Lassen Sie newConferences = conference.mapValues ​​Wert im Rückgabewert + "👍"

Filter Rückgabetyp

Das Filter Die Methode gibt jetzt ein Objekt desselben Typs zurück, mit dem Sie filtern.

// Der Typ dieser Variablen ist [String: String] let wwdc = conference.filter $ 0.key == "WWDC"

Standardwerte für die Wörterbuchsuche

Wenn Sie mit Wörterbüchern arbeiten, können Sie einen Standardwert angeben, wenn Sie die Subskriptionssyntax verwenden, um zu vermeiden, dass Sie später eine Option auspacken.

// Standardwert, wenn Schlüssel nicht gefunden wird. let talkShow = Konferenzen ["The Talk Show", Standard: "🤷‍♂️"]

Wörterbuch-Gruppierungsinitialisierer

Schließlich a Wörterbuch (Gruppierung :) Der Initialisierer wurde eingeführt, um das Erstellen eines neuen Wörterbuchs zu erleichtern, indem die Elemente einer vorhandenen Sammlung nach bestimmten Kriterien gruppiert werden. 

In den folgenden Beispielen erstellen wir ein Wörterbuch, indem wir alle zusammenfassen Konferenzen die haben den gleichen Anfangsbuchstaben. Das Wörterbuch enthält einen Schlüssel für jeden Anfangsbuchstaben im Konferenzen Collection, wobei jeder Wert aus allen Schlüsseln besteht, die mit diesem Buchstaben beginnen.  

let dictionary = Dictionary (Gruppierung: conference.values) $ 0.uppercased (). first! 

Ressourcen

Wenn Sie sich näher mit den neuen Funktionen von Swift 4 beschäftigen möchten, finden Sie hier einige weitere Ressourcen:

  • Was ist neu in Swift - Sitzung 402 - WWDC 2017
  • Apple Swift Guide
  • Ole Begemanns Neuerungen in Swift 4 Playground
  • Migrationshandbuch zu Swift 4

Fazit

Nachdem Sie sich jetzt einige der wichtigsten neuen Funktionen in Swift 4 angesehen haben, setzen Sie sich wahrscheinlich dafür ein, sie zu verwenden, um Ihre Codebase frisch und sauber zu halten. Schreiben Sie Ihren neuen Code, um die nützlichen neuen Funktionen zu nutzen, und überlegen Sie, wie Sie einen Teil Ihres vorherigen Codes umgestalten können, um ihn einfacher und lesbarer zu machen.

Lerne schnell

Wir haben ein umfassendes Handbuch zusammengestellt, um Sie beim Erlernen von Swift zu unterstützen, egal ob Sie gerade mit den Grundlagen anfangen oder fortgeschrittenere Themen erkunden möchten.

Sie können auch einige unserer anderen Beiträge zur Entwicklung von iOS-Apps überprüfen!