12 Jahre lang war UIKit der „Way to go“, wenn es um native iOS-UI-Entwicklung ging. Mit SwiftUI gibt es nun den neuen Stern am Himmel. Doch kann man SwiftUI bereits produktiv verwenden? Oder ist es eher ratsam, noch an dem ausgereiften UIKit festzuhalten? Bei dem Vortrag geht es um neue Denkweisen, den Reiz der deklarativen UI-Entwicklung und die wichtigsten Punkte, die man beim Umstieg beachten sollte.
Build Patterns - Patterns und Best Practices für den Build Prozess
Von UIKit zu SwiftUI - was beim Umstieg zu beachten ist
1. VON UIKIT ZU SWIFTUI – WAS
BEIM UMSTIEG ZU BEACHTEN IST
contact@letsdev.de
www.letsdev.de
2. 06.03.2020let's dev GmbH & Co. KG contact@letsdev.de// // //Nicolas Spinner
AGENDA
2
// Imperative und deklarative Programmierung
// Aufbau von SwiftUI Views
// Zusammenspiel mit UIKit
// UIKit vs SwiftUI
// Live Demo
// Fazit
3. 06.03.2020let's dev GmbH & Co. KG contact@letsdev.de// // //Nicolas Spinner
IMPERATIV
3
// Zeile für Zeile wird nacheinander ausgeführt
// UI nach State Changes manuell updaten
4.
5.
6.
7.
8.
9.
10.
11. 06.03.2020let's dev GmbH & Co. KG contact@letsdev.de// // //Nicolas Spinner
DEKLARATIV
11
// SwiftUI View wird durch Code beschrieben
// UI wird bei State Changes automatisch geupdatet
20. 06.03.2020let's dev GmbH & Co. KG contact@letsdev.de// // //Nicolas Spinner
Like the name implies, a property
wrapper is essentially a type that wraps a
given value in order to attach additional
logic to it
Quelle Definition: https://www.swiftbysundell.com/articles/property-wrappers-in-swift/
PROPERTY WRAPPERS
20
21. 06.03.2020let's dev GmbH & Co. KG contact@letsdev.de// // //Nicolas Spinner
PROPERTY WRAPPERS
21
// Swift 5.1 Feature
// Spielen eine große Rolle in SwiftUI
// Es können auch eigene Property Wrapper definiert werden
22.
23.
24.
25.
26.
27.
28.
29.
30. 06.03.2020let's dev GmbH & Co. KG contact@letsdev.de// // //Nicolas Spinner
OPAQUE RETURN TYPES
30
// Erfordern, dass immer der gleiche Typ zurückgegeben wird
// Compiler Optimierung
// Protokolle mit associatedTypes können zurückgegeben werden
// Implementation Details bleiben dem Anwender verborgen
31. Function declares an opaque return
type, but has no return statements
in its body from which to infer an
underlying type
44. 06.03.2020let's dev GmbH & Co. KG contact@letsdev.de// // //Nicolas Spinner 44
// Views sind Klassen und Models Structs
// Vererbung
// Über 10 Jahre im Einsatz
// Storyboards/Xib Merge Konflikte
// Sehr viel Auto Layout Code
UIKit SwiftUI
47. 06.03.2020let's dev GmbH & Co. KG contact@letsdev.de// // //Nicolas Spinner 47
// Views sind Klassen und Models Structs
// Vererbung
// Über 10 Jahre im Einsatz
// Storyboards/Xib Merge Konflikte
// Sehr viel Auto Layout Code
// State Changes müssen manuell
geupdated werden
// Views sind Structs und Models Klassen
// Composition
// Auf der WWDC 2019 vorgestellt
// Swift Code als Format
// Meist weniger View Code
// UI spiegelt immer den aktuellen State
wider
// In einigen Fällen muss noch auf UIKit
zurückgegriffen werden
UIKit SwiftUI
50. 06.03.2020let's dev GmbH & Co. KG contact@letsdev.de// // //Nicolas Spinner
FAZIT
50
// An einigen Stellen noch bemerkbar, dass SwiftUI sehr neu ist
// Dort, wo nicht auf UIKit zurückgegriffen werden muss, schneller und weniger Code
// iOS 13+
// Möglich, nach und nach auf SwiftUI umzustellen
// Anfangen mit unkritischen Views
51. let's dev GmbH & Co. KG
Eimsbütteler Chaussee 21
20259 Hamburg
Fon: +49 40 60 77 922 0
Fax: +49 40 60 77 922 1
let's dev GmbH & Co. KG
Alter Schlachthof 33
76131 Karlsruhe
Fon: +49 721 266 765 0
Fax: +49 721 266 765 1
VIELEN DANK.
contact@letsdev.de
www.letsdev.de
52. 06.03.2020let's dev GmbH & Co. KG contact@letsdev.de// // //Nicolas Spinner
REFERENZEN
52
// https://www.hackingwithswift.com/articles/187/how-to-use-opaque-return-types-in-
swift-5-1
// https://medium.com/@PhiJay/whats-this-some-in-swiftui-34e2c126d4c4
// Eidhof, C., & Krugler, F. (2020). Thinking in SwiftUI (1. Aufl.). Abgerufen von https://
www.objc.io/books/thinking-in-swiftui/
// https://www.swiftbysundell.com/articles/property-wrappers-in-swift/
// https://www.hackingwithswift.com/