Refaktorierung in SwiftUI mit Property Wrappern und ViewModifiern​

Seite 4: Kompakt und gut lesbar

Inhaltsverzeichnis

Mit einfachen und kurzen Property Wrappern, ViewModifiern und zugehörigen Methoden in View-Extensions lässt sich der Programmcode einer View kompakter gestalten und die Lesbarkeit verbessern. Wer sie an mehreren Stellen einsetzt, verringert zudem die Fehleranfälligkeit.

Diese Form der Refaktorierung bietet sich in folgenden Situationen an:

  • Kommen die Elemente an vielen Stellen vor, spart die Modularisierung Arbeit, macht den Code lesbarer und weniger fehleranfällig.
  • Bei einer komplizierten View mit vielen dynamischen Eigenschaften verbessert das Vorgehen vor allem die Lesbarkeit und die Wartbarkeit des Codes.
  • Durch das Auslagern der Funktionsweise in ein Framework steht sie in mehreren Projekten Zur Verfügung.

Die Vorgabe eines beliebigen Default-Werts über einen ViewModifier mit zugehöriger Methode in einer View-Extension ist ebenfalls wenig aufwändig. Das beim Refaktorieren erstellte Framework lässt sich flexibel in vielen Projekten einsetzen.

Der Artikel hat sich ausschließlich mit dynamischen Eigenschaften befasst, die der Property Wrapper AppStorage managt. Andere Property Wrapper eignen sich ebenso. Solange sich ein Schlüssel, ein KeyPath, ein Default-Wert, ein Typ oder etwas anderes in einen eigenen Property Wrapper integrieren lässt, eignet er sich prinzipiell für diese Methode der Refaktorierung.

Eigene Property Wrapper für dynamische Eigenschaften eröffnen zahlreiche Möglichkeiten. Beispielsweise lässt sich ein Text einer dynamischen Eigenschaft automatisch in einer Datei speichern. Bei deren Änderung soll die dynamische Eigenschaft die Änderung übernehmen und die betroffenen Views sollen neu berechnet werden. Dies mag aber Thema eines anderen Beitrages sein.

In einem Framework müssen von außen erreichbare Elemente als public deklariert und explizite Initialisierer hinzugefügt werden. Implizite Initialisierer sind nicht public. Im Interesse des übersichtlichen Programmcodes berücksichtigen die Codeausschnitte diese Vorgabe nicht.

Die Beispiele dieses Artikels finden sich in dem Sourcecode zu dem Framework LockApp auf GitHub. Es enthält einen passenden LockAppButton zum Sperren und Entsperren einer App per FaceID, TouchID und Passwort und zusätzliche ViewModifier. Das Framework steht unter der MIT-Lizenz zur Verfügung.

Wolf Dieter Dallinger
ist Freiberufler, schreibt seit vielen Jahren Schulungshandbücher für IT-Unternehmen und entwickelt Apps für iPhone und iPad bevorzugt mit Swift. Seine Lieblingsframeworks sind der Datenbankwrapper Core Data und das GUIFramework SwiftUI.

(rme)