Mit dem Release von Xcode 8.3 und Swift 3.1 schneidet Apple alte Zöpfe ab und verweigert Swift 2-Anwendungen jeglichen Support. Aus diesem Grund beschäftigen wir uns aktuell intensiv mit der Migration bestehender Apps und halten unsere Erfahrungen mit der aktuellen Version der Apple-eigenen Programmiersprache fest:

Neuerungen

  • Swift Package Manager erlaubt das Teilen von Code über mehrere Projekte ohne Cocoapods oder Carthage
  • Neue Code Konstanten (Float.pi, CGFloat.pi)

Änderungen

  • Funktionsparameter sind Konstanten
  • Alle Funktionsparameter (auch der erste) werden nun benannt: array.removeAtIndex() wird zu array.remove(at:)
  • Inkrementoperatoren ++ und -- wurden komplett durch += und -= abgelöst
  • Redundante Bezeichnungen werden gestutzt: stringByAppendingString wird zu appending, NSBundle.mainBundle() wird zu Bundle.main
  • der NS-Präfix verabschiedet sich und damit eine der letzten Überbleibsel von NeXTStep, einem Betriebssystem, das unter Steve Jobs in den 80er Jahren entwickelt worden war: NSBundle wird zu Bundle, NSFileManager wird zu FileManager
  • Grand Central Dispatch mit Swift-Syntax: dispatch_async(dispatch_queue_create("Queue", nil) wird zu DispatchQueue(label: "Queue").async
  • lowerCamelCasing statt UpperCamelCasing bei enums und const: UIStatusBarStyle.LightContent wird zu UIStatusBarStyle.lightContent

Probleme

  • Das automatische Konvertieren von Swift 2 nach 3 funktioniert nur bedingt und ignoriert so manche Konvention
  • Das Core Framework bietet nach wie vor zahllose obsolete Datentypen an, die händisch konvertiert werden müssen
 
Bei all den Deprecations fühlt sich sogar Guardlet Johansson wie eine leere Hülle

Bei all den Deprecations fühlt sich sogar Guardlet Johansson wie eine leere Hülle

 

Der Aufwand ist dieses Mal erheblich größer als noch von Swift 1 auf 2, allerdings halten wir den Großteil der Änderungen für sinnvoll.
Und dann wartet mit Swift 4 ja schon das nächste große Update um die Ecke.