Mit Swift und SwiftUI erstellen Sie professionelle und moderne Apps für macOS und iOS. Wie das geht, zeigt Ihnen Michael Kofler in diesem vollständig neu konzipierten Swift-Handbuch. Von den ersten Zeilen in Xcode über das Design Ihrer neuen App mit SwiftUI bis zur Veröffentlichung im App-Store lernen Sie alle Schritte der Anwendungsentwicklung kennen und machen sich mit den neuen Features von Swift 6 vertraut. Ideal für das Selbststudium und den Unterricht.
Aus dem Inhalt:
- Crashkurs Xcode
- Schleifen, Funktionen und Closures
- Strukturen, Klassen und Protokolle
- Views anwenden und selbst programmieren
- App-Design und Animation
- Data Binding, SwiftData und iCloud
- Internationalisierung und App Store
Die Fachpresse zur Vorauflage:
Mac Life: »Wer Apps mit Swift programmieren möchte, erhält mit diesem Wälzer einen soliden Helfer. «
Inhaltsverzeichnis
Vorwort . . . 13
Teil I. Einführung . . . 17
1. Hello, World! . . . 19
1. 1 . . . Erste Schritte mit Xcode . . . 20
1. 2 . . . Der Hello-World-Code . . . 24
1. 3 . . . Eigene Code-Experimente . . . 28
2. Learning by Doing: Die erste App . . . 31
2. 1 . . . Schritt 1: Eine Liste mit den Buchtiteln . . . 33
2. 2 . . . Schritt 2: Gestaltung der Listenelemente . . . 45
2. 3 . . . Schritt 3: Bücher nach Sprachen gruppieren . . . 55
2. 4 . . . Schritt 4: Von der Liste zur Detailansicht . . . 58
2. 5 . . . Schritt 5: Die RatingView . . . 63
2. 6 . . . Schritt 6: Multiplatform- und Farb-Finetuning . . . 70
2. 7 . . . Schritt 7: Persistenz mit SwiftData . . . 74
3. Tipps & Tricks . . . 81
3. 1 . . . Syntaxeigenheiten von Swift . . . 82
3. 2 . . . Coding mit KI-Unterstützung . . . 87
3. 3 . . . Xcode . . . 90
Teil II. Swift . . . 101
4. Variablen, Optionals und Datentypen . . . 103
4. 1 . . . Variablen und Konstanten . . . 103
4. 2 . . . Optionals . . . 107
4. 3 . . . Elementare Datentypen . . . 111
4. 4 . . . Zeichenketten . . . 115
4. 5 . . . Wert- versus Referenztypen . . . 122
5. Operatoren . . . 125
5. 1 . . . Zuweisungs- und Rechenoperatoren . . . 125
5. 2 . . . Vergleichsoperatoren und logische Operatoren . . . 128
5. 3 . . . Range-Operatoren . . . 131
5. 4 . . . Operatoren für Fortgeschrittene . . . 132
6. Verzweigungen und Schleifen . . . 135
6. 1 . . . Verzweigungen mit if . . . 135
6. 2 . . . Inverse Logik mit guard . . . 138
6. 3 . . . Verzweigungen mit switch . . . 139
6. 4 . . . Versions- oder plattformabhängiger Code . . . 141
6. 5 . . . Schleifen . . . 142
7. Funktionen und Closures . . . 149
7. 1 . . . Funktionen definieren und ausführen . . . 149
7. 2 . . . Parameter . . . 157
7. 3 . . . Standardfunktionen . . . 164
7. 4 . . . Funktionen als eigener Datentyp . . . 166
7. 5 . . . Closures . . . 168
8. Arrays, Dictionaries, Sets und Tupel . . . 173
8. 1 . . . Arrays . . . 173
8. 2 . . . Arrays und Aufzählungen verarbeiten . . . 180
8. 3 . . . Dictionaries . . . 187
8. 4 . . . Sets . . . 189
8. 5 . . . Tupel . . . 191
9. Grundlagen der objektorientierten Programmierung . . . 193
9. 1 . . . Klassen und Strukturen . . . 193
9. 2 . . . Enumerationen . . . 201
9. 3 . . . Eigenschaften . . . 204
9. 4 . . . Init-Funktion . . . 213
9. 5 . . . Methoden . . . 219
9. 6 . . . Subscripts . . . 225
9. 7 . . . Typ-Aliasse . . . 227
10. Objektorientierte Programmierung für Fortgeschrittene . . . 229
10. 1 . . . Vererbung . . . 229
10. 2 . . . Generics . . . 239
10. 3 . . . Protokolle . . . 242
10. 4 . . . Standardprotokolle . . . 251
10. 5 . . . Extensions . . . 256
10. 6 . . . Protokollerweiterungen . . . 258
11. Fehlerabsicherung . . . 263
11. 1 . . . Fehlerabsicherung mit try und catch . . . 263
11. 2 . . . Selbst Fehler auslösen (throws und throw) . . . 270
11. 3 . . . Fehler in Funktionen weitergeben (rethrows) . . . 273
11. 4 . . . Das Error-Protokoll . . . 275
12. Swift-Interna . . . 277
12. 1 . . . Speicherverwaltung . . . 277
12. 2 . . . Attribute, Property Wrapper und Makros . . . 282
12. 3 . . . Reflection und KeyPath-Ausdrücke . . . 286
12. 4 . . . Swift Package Manager . . . 290
Teil III. SwiftUI . . . 293
13. Views . . . 295
13. 1 . . . Grundlagen . . . 297
13. 2 . . . Text . . . 307
13. 3 . . . Buttons und Optionen . . . 312
13. 4 . . . Bitmaps und Icons (Image) . . . 317
13. 5 . . . Grafik (Canvas, Path und Shape) . . . 321
13. 6 . . . Container (Stack, ScrollView, Grid) . . . 323
13. 7 . . . Farbe, Datum und Uhrzeit auswählen (Date- und ColorPicker) . . . 330
13. 8 . . . Ereignisse (Gestures) . . . 333
13. 9 . . . Vorschau (Preview-Optionen) . . . 336
13. 10 . . . Apps auf dem eigenen iPhone ausführen . . . 340
14. State, Binding und Observable . . . 343
14. 1 . . . Variablen synchronisieren (@State und @Binding) . . . 343
14. 2 . . . Umgebungsvariablen (@Environment) . . . 352
14. 3 . . . Fokus-Management (@FocusState) . . . 354
14. 4 . . . Instanzen von Klassen beobachten (@Observable) . . . 355
14. 5 . . . Model-View-ViewModel (MVVM) . . . 362
14. 6 . . . Code-Organisation nach MVVM-Regeln . . . 364
15. Listen und Tabellen . . . 373
15. 1 . . . Listen . . . 373
15. 2 . . . Listen manipulieren . . . 379
15. 3 . . . Beispiel: Issue-Management . . . 382
15. 4 . . . Tabellen . . . 392
16. Navigation . . . 399
16. 1 . . . NavigationStack . . . 399
16. 2 . . . Navigation entlang eines Pfads . . . 402
16. 3 . . . Deep Links . . . 407
16. 4 . . . NavigationSplitView . . . 414
16. 5 . . . TabView . . . 419
16. 6 . . . Toolbar . . . 421
16. 7 . . . Modale Dialoge (Alerts, Sheets, Popovers) . . . 424
16. 8 . . . Best Practices . . . 428
17. SwiftUI-Spezialthemen . . . 431
17. 1 . . . Animationen . . . 432
17. 2 . . . Einstellungen (User-Defaults, @AppStorage) . . . 437
17. 3 . . . macOS-App mit mehreren Fenstern (FileDocuments) . . . 440
17. 4 . . . Eigene View-Modifier . . . 448
17. 5 . . . UIKit-Views in SwiftUI verwenden . . . 452
17. 6 . . . Capabilities und Entitlements . . . 458
Teil IV. Programmier- und Arbeitstechniken . . . 461
18. Asynchrone Programmierung . . . 463
18. 1 . . . Tasks, async und await . . . 465
18. 2 . . . actor und Sendable . . . 473
18. 3 . . . Asynchrone Programmierung in SwiftUI . . . 480
18. 4 . . . Beispiel: Asynchroner Download . . . 484
18. 5 . . . Beispiel: Datenauswertung und -visualisierung . . . 491
19. Dateien, JSON und XML . . . 499
19. 1 . . . Dateinamen und URLs . . . 500
19. 2 . . . Standardverzeichnisse . . . 501
19. 3 . . . Dateioperationen . . . 506
19. 4 . . . Bundle-Dateien und Assets . . . 510
19. 5 . . . JSON-Dateien verarbeiten . . . 512
19. 6 . . . XML-Dateien lesen . . . 519
20. Netzwerkfunktionen und REST-APIs . . . 525
20. 1 . . . Dateien herunterladen . . . 526
20. 2 . . . REST-APIs nutzen . . . 528
20. 3 . . . Beispiel: Aktuelles Wetter ermitteln . . . 531
20. 4 . . . Beispiel: New-York-Times-Bestsellerliste . . . 534
21. SwiftData . . . 541
21. 1 . . . Persistenz . . . 541
21. 2 . . . SwiftData-Überblick . . . 543
21. 3 . . . Modellierung (Schema) . . . 545
21. 4 . . . Container . . . 549
21. 5 . . . Daten lesen und speichern (Kontext) . . . 550
21. 6 . . . Relationen . . . 554
21. 7 . . . SwiftData-Interna . . . 559
21. 8 . . . Beispiel: To-do-App . . . 564
21. 9 . . . Undo-Funktion für die To-do-App . . . 574
22. iCloud . . . 581
22. 1 . . . iCloud-Grundlagen . . . 581
22. 2 . . . Hello, iCloud! . . . 583
22. 3 . . . SwiftData und iCloud . . . 592
Teil V Apps . . . 597
23. Währungskalkulator . . . 599
23. 1 . . . App-Überblick . . . 599
23. 2 . . . Umrechnungskurse herunterladen und speichern (Model) . . . 602
23. 3 . . . UI-Logik (View Model) . . . 606
23. 4 . . . Benutzeroberfläche (View) . . . 612
23. 5 . . . Währungseinstellung (View) . . . 616
24. Lokalisierung und App Store . . . 623
24. 1 . . . Artwork . . . 623
24. 2 . . . Mehrsprachige Apps . . . 626
24. 3 . . . Eigene Apps im App Store anbieten . . . 637
24. 4 . . . macOS-Programme selbst weitergeben . . . 647
25. Familieneinkaufsliste . . . 653
25. 1 . . . Bedienung . . . 654
25. 2 . . . Software-Design . . . 658
25. 3 . . . Einkaufsliste und Kategorien (Model) . . . 666
25. 4 . . . UI-Logik (View Model) . . . 671
25. 5 . . . Grundaufbau der Benutzeroberfläche (ContentView) . . . 675
25. 6 . . . Shopping-Tab (View) . . . 678
25. 7 . . . Planungs-Tab (View) . . . 685
25. 8 . . . Settings-Tab (View) . . . 689
25. 9 . . . REST-Server-Implementierung mit Python . . . 693
25. 10 . . . REST-Client in Swift (View Model) . . . 706
Index . . . 717