SwiftUI: Zwischen Begeisterung und Ernüchterung

SwiftUI ist Killer. Ich wurde nicht müde das zu betonen, nachdem Apple sein neues UI-Framework auf der diesjährigen WWDC vorgestellt hat und ich in den entsprechenden Sessions sah, wie SwiftUI funktionierte und was für Möglichkeiten es im Zusammenspiel mit Xcode 11 bot. Auch heute bin ich noch immer von SwiftUI fasziniert, doch die anfängliche Euphorie hat sich deutlich gelegt. Mehr noch: Nach mehreren Stunden intensiver Arbeit mit SwiftUI bin ich sogar ein wenig ernüchtert. Eine Bestandsaufnahme.

Von Initializern, Modifiern und Unübersichtlichkeit

Das Erstellen von Views in SwiftUI läuft im Prinzip über zwei entscheidende Schnittstellen ab: Die Initializer einer View selbst und deren Modifier. Der Initializer legt die grundlegenden Attribute der View fest, beispielsweise den Text für ein Label oder die Action für einen Button. Die Modifier auf der anderen Seite dienen zur Anpassung diverser Eigenschaften. Bei einem Text können so beispielsweise die Schriftart und -größe sowie die Farbe angepasst werden.

Das alles an sich ist schön und gut und prinzipiell auch clever durchdacht. Doch es kann sehr schnell sehr unübersichtlich werden. Wenn innerhalb einer Liste verschachtelte HStacks und VStacks genutzt werden die Bilder und Text enthalten deren Informationen mittels ForEach aus einem Model bezogen werden auf das per Binding und $-Syntax zugegriffen wird und die dann auch noch individuell mittels Modifier angepasst werden … Ja, dann kann einem schnell schwindelig werden. Zumal Xcode 11 in seiner jetzigen Form bei der Auflösung möglicher Fehler keine große Hilfe ist. Hat man sich irgendwo vertippt, wird der Fehler meist ganz woanders angezeigt. Zwar darf man die Hoffnung haben, dass sich dieses Verhalten bis zum Golden Master noch ändert, im Moment wird Debugging damit aber zur Geduldsprobe. Und teils sehr frustrierend.

Klammernwirrwarr

Ebenfalls seinen Teil zur Unübersichtlichkeit tragen die in sich verschachtelten Closures bei. Gerade View-Elemente wie Buttons, die mithilfe mehrerer Closures konfiguriert werden, können schnell unleserlich und damit auch schwer verständlich werden, wenn sie im Kontext anderer verschachtelter View-Elemente wie Listen oder Stacks verwendet werden. Überall sieht man runde und geschweifte Klammern, kommaseparierte Parameter die mittels Closure aufgelöst werden und am Ende eine View komponieren sollen. Ab einem gewissen Grad an Komplexität lässt es sich meiner persönlichen Meinung nach nur schwer mit SwiftUI arbeiten. Dazu muss man aber natürlich sagen, dass ich selbst auch noch einiges lernen muss, was die verschiedenen View-Elemente und Modifier betrifft. Dennoch empfinde ich die Einstiegshürde als extrem hoch.

Dazu kommen Änderungen in der Sprache Swift selbst, bei denen man das Gefühl hat, dass sie extra für SwiftUI maßangefertigt wurden. @State, @Binding, @EnvironmentObject; Swift ist inzwischen voller Argumente zur Deklaration von Properties und Methoden, dass die Einfachheit, die Swift eigentlich verkörpern sollte, in meinen Augen immer mehr zurückfällt. Dazu kommen Abkürzungen und Kurzschreibweisen, die ich bei der Arbeit teils eher hinderlich empfinde. Plötzlich braucht es kein return mehr bei Methoden, die nur einen Befehl ausführen. Und man braucht nur jene Parameter einer Funktion zu übergeben, die man selbst setzen möchte, sofern für die übrigen Parameter ein Default-Value existiert. Das mag an sich praktisch sein, läuft aber der Code Completion von Xcode zuwider (die kennt nämlich nur die Variante der Funktion mit allen Parametern) und führt insbesondere bei Initializern dazu, dass ich mich manchmal geradezu verzweifelt frage, welchen ich denn als Basis jetzt eigentlich verwenden soll.

Oberflächliche Dokumentation

Dazu kommt, dass die aktuelle Dokumentation zu SwiftUI noch sehr oberflächlich und teils fehlerhaft ist. Letzteres gilt insbesondere für die Tutorials, die ja als Einstieg in die Programmierung mit SwiftUI dienen. Manche dort beschriebenen Befehle sind inzwischen überholt (ganz konkret hat sich an einer Stelle die Reihenfolge der Parameter geändert) oder die daraus resultierenden Ergebnisse falsch (kennt noch wer die tolle Edit-Ansicht mit zwei „Done“-Schaltflächen in der Navigation-Bar?). Darüber hinaus zieht das Niveau sehr schnell sehr stark an. Ab einem gewissen Punkt hatte ich das Gefühl, nur noch Code abzuschreiben, ohne so recht zu wissen, was das soll und ohne ausführliche Erläuterungen zu erhalten; ich hasse so etwas!

Es fehlt der Dokumentation an Tiefe und Verständnis, vieles wird als gegeben vorausgesetzt. Manches davon konnte ich mir durch Experimentieren und langes Grübeln selbst erarbeiten, normalerweise fällt der Einstieg in neue Techniken aber deutlich leichter.

Fazit

Ja, wir befinden uns in der Beta-Phase, das habe ich nicht vergessen. Und ich bin guter Dinge, dass sich gerade in puncto Dokumentation bis Herbst noch sehr viel in Bezug auf SwiftUI tun wird.

Dennoch macht sich Ernüchterung bei mir breit. Der Weg, der mit Swift und SwiftUI beschritten wird, wirkt im Kern ein wenig aufgesetzt und macht in meinen Augen vieles deutlich komplizierter. Swift mag dadurch als Sprache mächtiger und flexibler werden, doch manchmal ist weniger einfach mehr. Neue Argumente sprießen wie Unkraut aus dem Boden und neue Regeln erlauben das teils deutliche Kürzen von Code. Das mag in einem fertigen Projekt schön aussehen, bei der Arbeit mit SwiftUI aber habe ich mich häufig am Kopf gekratzt und gefragt, was da jetzt eigentlich passiert. Und warum.

Ich selbst werde mich weiter intensiv mit Swift und SwiftUI beschäftigen. Aber die Traumlösung, für die ich es anfangs hielt, scheint es am Ende womöglich doch nicht zu werden. Zumindest nicht zum jetzigen Zeitpunkt. Und ich habe ein wenig Angst, dass Swift auf lange Sicht viel von seinem Charme verliert, wenn es auch in Zukunft mit einer Vielzahl weiterer neuer Attribute, Schlüsselwörter und Abkürzungen „optimiert“ wird.

Wie seht ihr diese ganze Situation? Welche Erfahrungen habt ihr bisher mit SwiftUI gemacht? Wie gefällt euch das Framework und die Arbeit damit? Und was haltet ihr allgemein von den neuen Sprach-Features in Swift? Ich freue mich auf den Austausch!

Euer Thomas


Kommentare

2 Antworten zu „SwiftUI: Zwischen Begeisterung und Ernüchterung“

  1. Avatar von Dagmar Feldt
    Dagmar Feldt

    Dieser Artikel ist mir sehr aus der Seele gesprochen!
    Bin im Wirrwarr der öffnenden und schließenden Klammern so verloren gegangen, dass ich zu UIKit zurück gekehrt bin. Besonders gut fand ich den Hinweis, dass Swift so seinen Charme verliert! Vielen Dank für den gut formulierten Artikel!

    1. Herzlichen Dank für das liebe Feedback! 🙂 Ich bin zwar insgesamt sehr von SwiftUI begeistert, man merkt meines Erachtens aber deutlich, dass es sich hier um die erste Version dieses neuen UI-Frameworks handelt. Ich bin gespannt, wie es in Zukunft von Apple weiterentwickelt wird.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert