Michael Kofler präsentiert Ihnen auf 1300 Seiten alle Merkmale und Besonderheiten von Apples Programmiersprache. Zugleich erhalten Sie eine Einführung in die Syntax und in die objektorientierte Programmierung. Sie erfahren anhand vieler Beispiele, wie Sie Apps in iOS, macOS und tvOS entwickeln. Ideal für Umsteiger von Objective-C und Java, aber auch für Einsteiger mit Grundkenntnissen im Programmieren. Inklusive iCloud und Server-side Swift.
Aus dem Inhalt:
Michael Kofler hat Telematik an der TU Graz studiert und ist einer der erfolgreichsten deutschsprachigen IT-Fachbuchautoren. Zu seinen Themengebieten zählen neben Linux auch IT-Sicherheit, Python, Swift, Java und der Raspberry Pi. Er ist Entwickler, berät Firmen und
arbeitet als Lehrbeauftragter.
Vorwort ... 17
TEIL I Swift ... 21
1. Hello World! ... 23
1.1 ... »Hello World« im Playground ... 23
1.2 ... »Hello World« als Terminal-App ... 32
2. Swift-Crashkurs ... 41
2.1 ... Elementare Syntaxregeln und Kommentare ... 41
2.2 ... Variablen, Konstanten und Datentypen ... 46
2.3 ... Strukturierung des Codes ... 50
2.4 ... Klassen und Datenstrukturen ... 54
2.5 ... Fehlerabsicherung ... 56
2.6 ... Xcode-Crashkurs ... 58
3. Operatoren ... 69
3.1 ... Zuweisungs- und Rechenoperatoren ... 69
3.2 ... Vergleichsoperatoren und logische Operatoren ... 74
3.3 ... Range-Operatoren ... 78
3.4 ... Operatoren für Fortgeschrittene ... 82
3.5 ... Eigene Operatoren ... 85
4. Variablen und Optionals ... 89
4.1 ... Variablen und Konstanten ... 89
4.2 ... Optionals ... 95
4.3 ... Wert- versus Referenztypen ... 100
5. Verzweigungen und Schleifen ... 103
5.1 ... Verzweigungen mit if ... 103
5.2 ... Inverse Logik mit guard ... 106
5.3 ... Verzweigungen mit switch ... 108
5.4 ... Versions- oder plattformabhängiger Code ... 111
5.5 ... Schleifen ... 112
5.6 ... Nicht triviale Schleifen ... 117
6. Funktionen und Closures ... 123
6.1 ... Funktionen definieren und ausführen ... 123
6.2 ... Parameter ... 134
6.3 ... Standardfunktionen ... 141
6.4 ... Funktionale Programmierung ... 145
6.5 ... Closures ... 150
7. Zahlen und geometrische Strukturen ... 161
7.1 ... Zahlen und boolesche Werte ... 161
7.2 ... NSNumber ... 166
7.3 ... CGFloat, CGPoint, CGSize und Co. ... 167
8. Zeichenketten ... 173
8.1 ... Syntax ... 173
8.2 ... Bearbeitung von Zeichenketten ... 179
8.3 ... Suchen und ersetzen ... 183
8.4 ... Zeichenketten zerlegen und zusammensetzen ... 186
8.5 ... Zeichenketten und Zahlen umwandeln ... 192
8.6 ... Zeichenketten und binäre Daten umwandeln (Data-Struktur) ... 195
9. Datum und Uhrzeit ... 197
9.1 ... Datum und Uhrzeit ermitteln und darstellen ... 197
9.2 ... Rechnen mit Datum und Uhrzeit ... 199
10. Arrays, Dictionaries, Sets und Tupel ... 201
10.1 ... Arrays ... 201
10.2 ... Arrays und Aufzählungen verarbeiten ... 211
10.3 ... Dictionaries ... 221
10.4 ... Sets ... 225
10.5 ... Option-Sets ... 226
10.6 ... Tupel ... 228
10.7 ... Lottosimulator ... 230
11. Objektorientierte Programmierung I ... 235
11.1 ... Klassen und Strukturen ... 236
11.2 ... Enumerationen ... 244
11.3 ... Eigenschaften ... 251
11.4 ... Init- und Deinit-Funktion ... 263
11.5 ... Methoden ... 269
11.6 ... Subscripts ... 276
11.7 ... Typ-Aliasse ... 279
11.8 ... Speicherverwaltung ... 279
12. Objektorientierte Programmierung II ... 285
12.1 ... Vererbung ... 285
12.2 ... Generics ... 297
12.3 ... Protokolle ... 302
12.4 ... Standardprotokolle ... 312
12.5 ... Extensions ... 320
12.6 ... Protokollerweiterungen ... 325
12.7 ... Reflection und Metatypen ... 328
13. Fehlerabsicherung ... 335
13.1 ... Fehlerabsicherung mit try und catch ... 335
13.2 ... Selbst Fehler auslösen (throws und throw) ... 344
13.3 ... Fehler in Funktionen weitergeben (rethrows) ... 348
13.4 ... Das Error-Protokoll ... 351
13.5 ... Fehlerabsicherung von API-Methoden (NSError) ... 353
13.6 ... Result-Datentyp ... 355
14. Importe, Attribute und Systemfunktionen ... 361
14.1 ... Module, Frameworks und Importe ... 361
14.2 ... Attribute ... 365
14.3 ... Systemfunktionen aufrufen ... 367
TEIL II App-Programmierung ... 373
15. Hello iOS-World! ... 375
15.1 ... Projektstart ... 376
15.2 ... Gestaltung der App ... 377
15.3 ... Steuerung der App durch Code ... 381
15.4 ... Actions und Outlets für Fortgeschrittene ... 386
15.5 ... Layout optimieren ... 389
15.6 ... Textgröße mit einem Slider einstellen ... 394
15.7 ... Apps auf dem eigenen iPhone oder iPad ausführen ... 396
15.8 ... Komponenten und Dateien eines Xcode-Projekts ... 399
16. iOS-Grundlagen ... 401
16.1 ... Model-View-Controller (MVC) ... 401
16.2 ... Klassenhierarchie einer App-Ansicht ... 405
16.3 ... Die UIViewController-Klasse ... 407
16.4 ... Phasen einer iOS-App ... 411
16.5 ... Auto Layout ... 414
16.6 ... Layoutregeln durch Code definieren ... 429
16.7 ... Steuerelemente in einer Stack-View anordnen ... 431
16.8 ... Layoutvarianten ... 435
16.9 ... Texteingaben ... 442
16.10 ... Image-Views und Xcassets ... 450
17. iOS-Apps mit mehreren Ansichten ... 453
17.1 ... Storyboard und Controller-Klassen verbinden ... 453
17.2 ... Ansichten durch Segues verbinden ... 454
17.3 ... Segues mit Datenübertragung ... 459
17.4 ... Navigation-Controller ... 464
17.5 ... Tab-Bar-Controller ... 469
17.6 ... Split-View-Controller ... 475
17.7 ... Popups ... 485
17.8 ... Ja/Nein-Dialoge (UIAlertController) ... 496
18. Hello macOS-World! ... 499
18.1 ... Lottozahlengenerator ... 500
19. macOS-Grundlagen ... 509
19.1 ... Programme mit mehreren Fenstern ... 509
19.2 ... Tab-View-Controller ... 516
19.3 ... Standarddialoge ... 523
19.4 ... Tastatur ... 528
19.5 ... Menüs ... 533
19.6 ... Programme ohne Menü ... 542
19.7 ... Dunkles Erscheinungsbild (»Dark Mode«) ... 544
20. tvOS ... 547
20.1 ... Hello tvOS! ... 548
20.2 ... Fernbedienung auswerten ... 552
20.3 ... Focus Engine ... 558
TEIL III Programmier- und Arbeitstechniken ... 565
21. Dateien und User-Defaults ... 567
21.1 ... User-Defaults ... 567
21.2 ... Dateinamen und URLs ... 571
21.3 ... Bundle-Dateien und Assets ... 573
21.4 ... Standardverzeichnisse ... 575
21.5 ... Dateioperationen ... 580
21.6 ... Wie geht's weiter? ... 587
22. Netzwerk, XML und JSON ... 589
22.1 ... Dateien per HTTP/HTTPS laden ... 589
22.2 ... XML-Dokumente auswerten ... 597
22.3 ... JSON-Encoder und -Decoder ... 601
22.4 ... Webseiten anzeigen ... 608
23. Tabellen und Listen darstellen ... 615
23.1 ... Listen in iOS-Apps (UITableView) ... 615
23.2 ... Prototypzellen ... 621
23.3 ... Individuelle Gestaltung von Listenzellen ... 626
23.4 ... Veränderliche Listen ... 632
23.5 ... Tabellen in macOS-Apps (NSTableView) ... 634
23.6 ... Collections asynchron füllen (UICollectionView) ... 645
24. GPS- und Kompassfunktionen ... 653
24.1 ... Hello Map-View! ... 653
24.2 ... Wegstrecke aufzeichnen ... 658
24.3 ... Kompassfunktionen ... 665
25. Grafik und Animation ... 667
25.1 ... Eigene Steuerelemente mit Grafikfunktionen ... 667
25.2 ... Kompass-Steuerelement ... 673
25.3 ... Core Graphics ... 682
25.4 ... Animationen ... 685
26. Touch, Maus, Gestures und Drag & Drop ... 691
26.1 ... Touch ... 691
26.2 ... Maus ... 698
26.3 ... Gestures ... 705
26.4 ... Drag & Drop (macOS) ... 708
26.5 ... Drag & Drop (iOS) ... 721
27. Audio, Video und Fotos ... 735
27.1 ... Audiowiedergabe mit dem AVAudioPlayer ... 735
27.2 ... Audiowiedergabe mit dem AVPlayer ... 745
27.3 ... Audiowiedergabe mit dem AVPlayerViewController ... 747
27.4 ... Audioaufnahmen mit dem AVAudioRecorder durchführen ... 749
27.5 ... Videos abspielen ... 754
27.6 ... Videos mit der Picker-View auswählen und aufnehmen ... 757
27.7 ... YouTube-Videos abspielen ... 761
27.8 ... Fotos mit der Picker-View auswählen und aufnehmen ... 764
27.9 ... Fotos in einer AVCaptureSession aufnehmen ... 766
27.10 ... Barcodes in einer AVCaptureSession erkennen ... 774
28. SpriteKit ... 779
28.1 ... Hello SpriteKit! ... 780
28.2 ... Sprites erzeugen und bewegen ... 789
28.3 ... Spielsteuerung durch Touch-Ereignisse ... 794
28.4 ... Bewegungssteuerung (Gyroskop und Accelerometer) ... 800
28.5 ... Aktionen ... 806
28.6 ... Der Game-Loop ... 812
28.7 ... Kollisionserkennung ... 814
28.8 ... Minispiel: Luftballone abschießen ... 820
28.9 ... Physik ... 826
28.10 ... Minispiel: Pyramide zerstören ... 832
28.11 ... Scene-Editor ... 838
28.12 ... Partikel-Emitter ... 844
29. Core Data und SQLite ... 847
29.1 ... Hello, Core Data! ... 848
29.2 ... Core-Data-Klassenüberblick ... 853
29.3 ... Core-Data-Entities verknüpfen (Relationships) ... 855
29.4 ... Core-Data-Interna ... 865
29.5 ... SQLite.swift ... 868
30. iCloud ... 879
30.1 ... iCloud-Grundlagen ... 879
30.2 ... Key-Value-Speicher ... 885
30.3 ... CloudKit-Grundlagen ... 892
30.4 ... CloudKit-Programmiertechniken ... 899
30.5 ... CloudKit-Beispiel ... 908
31. Asynchrone Programmierung ... 921
31.1 ... Hello Grand Central Dispatch! ... 922
31.2 ... GCD-Grundlagen ... 925
31.3 ... Parallel rechnen ... 930
32. App Store und Co. ... 937
32.1 ... iOS-Artwork (Icons, Launch Screen) ... 938
32.2 ... macOS-Artwork (Icon) ... 940
32.3 ... tvOS-Artwork (Parallax-Icons, Launch und Top Shelf Image) ... 941
32.4 ... Mehrsprachige Apps ... 947
32.5 ... Eigene Apps im App Store anbieten ... 961
32.6 ... macOS-Programme selbst weitergeben ... 970
33. Xcode-Arbeitstechniken ... 979
33.1 ... Simulator-Ausgaben stoppen ... 979
33.2 ... Header-Code einer eigenen Klasse erzeugen ... 980
33.3 ... Versionsverwaltung mit Git ... 981
33.4 ... Crashlogs ... 984
33.5 ... Refactoring ... 984
33.6 ... Projekte umbenennen ... 986
33.7 ... Xcode-Verzeichnisse aufräumen ... 986
33.8 ... Apple Configurator ... 989
34. Server-side Swift ... 991
34.1 ... Swift unter Linux ... 994
34.2 ... Vapor kennenlernen ... 1000
34.3 ... Die Vapor-Toolbox ... 1010
34.4 ... Vapor-Grundlagen ... 1012
34.5 ... Datenbankanbindung mit Fluent ... 1024
34.6 ... Authentifizierung und Autorisierung ... 1037
34.7 ... Deployment ... 1045
TEIL IV Beispielprojekte ... 1051
35. New-York-Times-Bestseller ... 1053
35.1 ... New-York-Times-API ... 1055
35.2 ... Benutzeroberfläche ... 1058
35.3 ... Split-View-Variante ... 1062
36. To-do-Listen ... 1067
36.1 ... Gestaltung der Benutzeroberfläche ... 1068
36.2 ... Datenmodell ... 1069
36.3 ... View-Controller-Klasse ... 1070
36.4 ... Popup-View-Controller-Klasse ... 1077
36.5 ... iCloud-Variante ... 1078
36.6 ... Core-Data-Variante ... 1083
36.7 ... SQLite-Variante ... 1087
37. Schatzsuche ... 1097
37.1 ... Aufbau der App ... 1097
37.2 ... Datenmodell ... 1101
37.3 ... Location Manager selbst gemacht ... 1104
37.4 ... Steuerelement zur Richtungsanzeige (UIBezierPath) ... 1108
37.5 ... Hauptansicht mit Listenfeld ... 1109
37.6 ... Popup-Dialog zum Speichern ... 1114
37.7 ... Detailansicht mit Richtungspfeil ... 1115
38. Währungskalkulator ... 1121
38.1 ... App-Überblick ... 1121
38.2 ... Kurse ermitteln ... 1127
38.3 ... Das Datenmodell der App ... 1129
38.4 ... Umrechnungsansicht ... 1132
38.5 ... Einstellungsansicht ... 1138
38.6 ... Internationalisierung und Lokalisierung ... 1143
39. Fünf gewinnt ... 1145
39.1 ... Die App »Fünf gewinnt« ... 1145
39.2 ... Enumerationen und globale Funktionen (Globals.swift) ... 1148
39.3 ... Die Spiellogik (FiveWins.swift) ... 1152
39.4 ... Darstellung des Spielbretts und der Steine (BoardView.swift) ... 1162
39.5 ... Steuerung des Spielablaufs (ViewController.swift) ... 1171
39.6 ... Der Popup-Dialog (PopupVC.swift) ... 1176
39.7 ... Erweiterungsmöglichkeiten ... 1179
40. Puzzle-App ... 1181
40.1 ... Programmaufbau ... 1182
40.2 ... Die Klassen »Tile« und »Puzzle« ... 1185
40.3 ... Verwaltung der Benutzeroberfläche im View-Controller ... 1190
41. Icon-Resizer ... 1195
41.1 ... App-Überblick ... 1195
41.2 ... Icons verwalten (IconSize-Struktur) ... 1201
41.3 ... Hauptfenster (ViewController.swift) ... 1206
41.4 ... Drag-and-Drop-Quelle für Icons (IconCellView.swift) ... 1213
41.5 ... Drag-and-Drop-Empfänger für Icons (OriginalIconView.swift) ... 1215
41.6 ... Popup-Menü (IconChoiceVC.swift) ... 1217
41.7 ... Temporäres Verzeichnis erstellen und löschen ... 1218
42. Breakout ... 1221
42.1 ... Programmaufbau ... 1222
42.2 ... Initialisierung ... 1223
42.3 ... Spielsteuerung ... 1230
43. Pac-Man selbst gemacht ... 1233
43.1 ... Programmaufbau ... 1234
43.2 ... Der Tile-Editor »Tiled« ... 1235
43.3 ... Globale Konstanten, Datenstrukturen und Enumerationen ... 1240
43.4 ... Initialisierung des Spiels ... 1242
43.5 ... Die Maze-Klasse ... 1245
43.6 ... Aufbau der Spielszene (setup-Methoden) ... 1249
43.7 ... Spielsteuerung (touch-Methoden) ... 1255
43.8 ... Bewegung des Pac-Mans ... 1260
43.9 ... Steuerung der Monster ... 1264
43.10 ... Kollisionen ... 1269
43.11 ... Apple-TV-Variante von Pac-Man ... 1273
43.12 ... Pac-Man-Figuren zeichnen ... 1277
44. Asteroids ... 1279
44.1 ... Programmaufbau ... 1280
44.2 ... Globale Konstanten und Funktionen ... 1282
44.3 ... Programmstart und Tastaturereignisse (GameViewController) ... 1282
44.4 ... Initialisierung des Spiels (GameScene) ... 1285
44.5 ... Spielablauf (ebenfalls in GameScene) ... 1291
44.6 ... Fokussierbare Menütexte (MyLabel) ... 1296
44.7 ... Der Einstellungsdialog (MainScene) ... 1297
Index ... 1303