Neu in Swift 1.2

Die Welt ist ständig im Wandel. Nirgendwo gilt das so sehr wie in der digitalen Welt. Apple hat Swift gefühlt gestern erst vorgestellt. Schon wurde die Sprache wieder überarbeitet. Zusammen mit Xcode 6.3 wurde nun Swift 1.2 freigegeben. Das bringt einige spannende Neuerungen mit!

Neues in Swift 1.2

In Swift 1.2 setzt Apple den Siegeszug der Sprache fort. In Übersicht sind dies folgende Änderungen:

  • Verbesserte Geschwindigkeit
  • Das Keyword „as“ für das „casting“ ist nun expliziter
  • if und let bindings
  • Native Sets in Swift (als NSSet-Pendant)
  • Konstanten ohne Wert bei Deklaration
  • Zusammenspiel mit Objective-C verbessert

Das sind viele gute Nachrichten! Zu beachten ist speziell die Änderung rund um das Keyword „as“. Da hat sich die Syntax minimal geändert. Weitere Informationen zum Update findest Du übrigens auch direkt bei Apple in der Ankündigung von Swift 1.2. Wenn Du breits Projekte erstellt hast nimmt Dir übrigens der Swift Migrator die Arbeit der Konvertierung ab!

Verbesserte Geschwindigkeit

Swift ist zur Laufzeit bereits ohnehin teilweise schneller gewesen als Objective-C. Auf mikeash.com gibt es dazu ausführliche Hintergründe. Dieser Trend wird weiter fortgesetzt und Swift optimiert. Und dies in zweierlei Hinsicht:

  • Inkrementelle Übersetzung
    Wenn ein Projekt kompiliert wird, müssen ab Swift 1.2 nur noch die geänderten Dateien neu übersetzt werden. Das macht sich natürlich bei größeren Projekten automatisch bemerkbar.
  • Geschwindigkeit zur Laufzeit
    Die Performance wird durch die Optimierung der Standardbibliothek weiter verbessert. In wie weit sich das auf Deine Apps auswirkt, musst Du im Einzelfall mit den Xcode Instruments messen. Pauschal lässt sich kein Faktor angeben, da nur bestimmte Bereiche optimiert wurden.

Gerade bei der besseren Performance wird sich dieser Trend vermutlich fortsetzen. Apple wird immer mehr Klassen und Funktionalität nativ in Swift bereitstellen. Bei dieser Neuimplementierung wird mit Sicherheit auch an der Performanceschraube gedreht.

Änderungen beim Casting mit „as“

Das Casting mit dem Keywords as ist nun etwas strenger. Das folgende Beispiel definiert ein Array vom Typ AnyObject, ein spezieller Datentyp der für jedes Objekt stehen kann. Enthalten sind einfach zwei Filme vom Typ Movie:

Solche Arrays sind bei der Arbeit mit Cocoa-APIs nicht ungewöhnlich. Objective-C hatte generische Arrays ohne expliziten Datentypen. Beim Zugriff auf die Elemente steht der Typ der Objekte genau fest. Der Klassenname ist Movie. Über das Keyword as wurde vor Swift 1.2 eine erzwungene Umwandlung vorgenommen:

Ab Swift 1.2 ist dies wie ein Optional zu behandeln. Immerhin kann die Umwandlung auch fehlschlagen, wenn die Umwandlung nicht funktioniert. Ab der Version 1.2 muss dies entweder mit einem Fragezeichen als Optional gekennzeichnet werden. Alternativ kann das alte Verhalten mit dem Ausrufezeichen erzwungen werden:

Achtung: Die Änderung wirkt sich auch auf den bisherigen Quellcode aus! Im Zweifel muss aus „as“ einfach „as!“ gemacht werden (ein Ausrufezeichen angefügt werden).

Swift if/let bindings

Bei der Prüfung von Optionals mittels if werden die Werte häufig auch gleichzeitig mittels „let“ an Konstanten gebunden. Daraus ergibt sich schnell eine mehrfache Verschachtelt:

Mit den neuen Möglichkeiten und dem Keyword where geht es jetzt mit nur einer Ebene:

Die erste Zuweisung bleibt unverändert. Die reine Prüfung der Eigenschaft daten.valid wird hier nun mittels where angehangen. Mit Komma getrennt folgen dann die Zuweisungen. Durchaus eine Erleichterung!

Native Sets für Swift

Ein NSSet ist eine ungeordnete Sammlung von Elementen. Die Werte müssen einzigartig sein, dürfen also keine Duplikate enthalten. Bei der Entscheidung NSArray vs NSSet spielten diese beiden Faktoren eine wesentliche Rolle. Die Ordnung in einem Array kostet mehr Performance.

Bisher fehlte eine native Umsetzung in Swift. Die hat Apple mit dem Update 1.2 in Xcode 6.3 nun nachgereicht. Die Funktionalität stand zwar als Objective-C Klasse ohnehin bereit. Aber schön zu sehen, dass Stück für Stück eine native Umsetzung erfolgt.

Konstanten ohne Wert bei Deklaration

Bislang musste eine Konstante bei der Deklaration mit einem Wert gefüllt werden. Auch das ändert sich nun. Es ermöglicht neue Konstrukte, da die Konstante lediglich vor dem Zugriff einen Wert bekommen muss.

Integration von Objective-C

Es gibt auch einige Änderungen im Zusammenspiel mit Objective-C. Hier ist zum Beispiel der Export von Swift-Enumerations nach Objective-C zu nennen. Dafür wird das Keyword „@objc“ vor der Enum-Definition genannt. Ein Beispiel dazu gibt es in der Ankündigung der Betaversion von Swift 1.2 im Apple-Blog.

Der Swift Migrator hilft bei der Umstellung

Um notwendige Anpassungen für bestehende Projekte nicht zu aufwendig werden zu lassen, stellt Apple eine Lösung bereit. Gerade die inkompatible Änderungen rund um das Typencasting mit as zu beseitigen wäre von Hand lästig. Zum Glück wurde der Swift Migrator in Xcode 6.3 eingebaut und hilft Dir dabei. Er kann einfach über Edit > Convert > To Latest Swift Syntax aufgerufen und gestartet werden.

Tags:

Schreib einen Kommentar

Your email address will not be published.