Inhalt | 8 |
1 Apples neue Programmiersprache: Swift | 14 |
1.1 Willkommen bei Swift! | 14 |
1.2 Warum Swift? | 14 |
1.3 Swift und Objective-C | 15 |
1.4 Voraussetzungen für die Swift-Entwicklung | 16 |
1.4.1 Xcode | 16 |
1.4.2 Mac | 17 |
1.5 Swift-Ressourcen | 18 |
1.5.1 Apples Entwickler-Dokumentation | 18 |
1.5.2 Swift-Blog | 20 |
1.5.3 Code-Beispiele des Autors | 21 |
1.5.4 Das Internet | 22 |
2 Grundlagen der Programmierung | 24 |
2.1 Variablen und Konstanten | 28 |
2.1.1 Type Inference und Type Annotation | 30 |
2.2 Abfragen und Schleifen | 31 |
2.2.1 Bedingungen | 31 |
2.2.2 If | 34 |
2.2.3 While | 36 |
2.2.4 Do-While | 37 |
2.2.5 For | 38 |
2.2.6 For-In | 39 |
2.2.7 Switch | 41 |
2.2.8 Control Transfer Statements | 44 |
2.3 Kommentare | 46 |
2.3.1 Verschachtelte Kommentare | 46 |
2.3.2 Schlüsselwörter für Kommentare | 47 |
2.4 Fundamental Types | 48 |
2.4.1 Strings und Characters | 49 |
2.4.2 Arrays | 53 |
2.4.3 Dictionaries | 62 |
2.4.4 Tuples | 71 |
2.5 Funktionen | 73 |
2.5.1 Grundaufbau und Aufruf einer Funktion | 74 |
2.5.2 Eine erste einfache Funktion | 74 |
2.5.3 Funktion mit Parametern | 75 |
2.5.4 Funktion mit Rückgabewert | 76 |
2.5.5 Funktion mit mehreren Rückgabewerten | 79 |
2.5.6 Funktion mit optionalem Rückgabewert | 80 |
2.5.7 Funktion mit optionalen Parametern | 81 |
2.5.8 Local und External Parameter Names | 82 |
2.5.9 Funktionen mit Standardwerten für Parameter | 85 |
2.5.10 Funktionen mit beliebiger Parameterzahl | 87 |
2.5.11 Funktionen mit Variablen als Parameter | 88 |
2.5.12 Funktionen mit veränderbaren In-Out-Parametern | 89 |
2.5.13 Function Types | 91 |
2.5.14 Verschachtelte Funktionen | 95 |
2.6 Closures | 97 |
2.6.1 Closures als Variablen und Konstanten | 98 |
2.6.2 Closures als Parameter für Funktionen | 99 |
2.6.3 Kurzschreibweise für Closures als Parameter von Funktionen | 103 |
2.7 Enumerations | 105 |
2.7.1 Kurzschreibweisen für Enumerations | 108 |
2.7.2 Enumerations mittels Switch abfragen | 109 |
2.7.3 Zusätzliche Informationen in Enumeration-Werten speichern | 110 |
2.7.4 Member einer Enumeration feste Werte zuweisen | 112 |
2.7.5 Enumerations sind Value Types | 114 |
2.8 Structures | 115 |
2.8.1 Erstellen einer neuen Instanz | 116 |
2.8.2 Structures mit Properties | 117 |
2.8.3 Structures mit Methoden | 121 |
2.8.4 Structures sind Value Types | 122 |
3 Objektorientierte Programmierung mit Swift | 124 |
3.1 Swift und objektorientierte Programmierung | 124 |
3.2 Klassen | 125 |
3.2.1 Erstellen und Verwenden einer neuen Instanz | 126 |
3.2.2 Initialisierung von Objekten einer Klasse | 127 |
3.2.3 Klassen sind Reference Types | 130 |
3.2.4 Unterschiede zwischen Klassen und Strukturen | 132 |
3.3 Properties | 133 |
3.3.1 Stored Properties | 134 |
3.3.2 Computed Properties | 140 |
3.3.3 Property Observers | 146 |
3.3.4 Globale und lokale Variablen | 150 |
3.3.5 Type Properties | 151 |
3.4 Methoden | 154 |
3.4.1 Instance Methods | 154 |
3.4.2 Type Methods | 161 |
3.5 Subscripts | 163 |
3.5.1 Aufbau von Subscripts | 163 |
3.5.2 Subscript Overloading | 167 |
3.6 Optionals | 168 |
3.6.1 Forced Unwrapping | 170 |
3.6.2 Optional Binding | 173 |
3.6.3 Implicit Unwrapping | 174 |
3.6.4 Optional Chaining | 176 |
3.7 Vererbung | 183 |
3.7.1 Vererbung im Detail | 184 |
3.7.2 Überschreiben von Properties, Methoden und Subscripts | 187 |
3.7.3 Zugriff auf Properties, Methoden und Subscripts der Superklasse | 191 |
3.8 Initialisierung | 192 |
3.8.1 Grundaufbau eines Initializers | 192 |
3.8.2 Initializer mit Parametern | 194 |
3.8.3 Default Initializer | 196 |
3.8.4 Local Parameter Names und External Parameter Names in Initializern | 198 |
3.8.5 Initializer und Optionals | 199 |
3.8.6 Initializer und Constant Stored Properties | 201 |
3.8.7 Erstellen mehrerer Initializer | 202 |
3.8.8 Initializer und Vererbung | 207 |
3.8.9 Deinitialisierung | 225 |
3.9 Speicherverwaltung mit ARC | 227 |
3.9.1 Strong References und Reference Cycles | 228 |
3.9.2 Weak References | 231 |
3.9.3 Unowned References | 234 |
3.9.4 Best Practices zur Speicherverwaltung | 240 |
3.9.5 Closure Capture List | 240 |
3.10 Type Casting | 245 |
3.10.1 Typ prüfen mit is | 246 |
3.10.2 Downcasting mit as | 247 |
3.10.3 Any und AnyObject | 248 |
3.11 Nested Types | 251 |
4 Weiterführende Sprachmerkmale von Swift | 254 |
4.1 Extensions | 254 |
4.1.1 Syntax | 255 |
4.1.2 Computed Properties | 255 |
4.1.3 Methoden | 256 |
4.1.4 Initializer | 257 |
4.1.5 Subscripts | 258 |
4.1.6 Nested Types | 259 |
4.2 Protocols | 260 |
4.2.1 Syntax | 261 |
4.2.2 Deklaration von Properties | 262 |
4.2.3 Deklaration von Methoden | 264 |
4.2.4 Deklaration von Initializern | 267 |
4.2.5 Protocol Type | 270 |
4.2.6 Delegation | 271 |
4.2.7 Protocol Composition | 275 |
4.2.8 Protocols und Extensions | 277 |
4.2.9 Vererbung | 279 |
4.2.10 Class-Only Protocols | 281 |
4.2.11 Protocol Conformance | 282 |
4.2.12 Optionale Eigenschaften | 284 |
4.3 Generics | 286 |
4.3.1 Generic Functions | 287 |
4.3.2 Generic Types | 289 |
4.3.3 Type Constraints | 291 |
4.3.4 Associated Types | 292 |
4.4 Access Control | 296 |
4.4.1 Modules und Source Files | 297 |
4.4.2 Access Levels | 298 |
4.4.3 Syntax | 298 |
4.4.4 Access Levels in Custom Types | 299 |
4.4.5 Access Levels in Getter und Setter einer Property | 302 |
5 Swift, Cocoa und Objective-C | 304 |
5.1 Interoperability | 305 |
5.1.1 Swift Type Compatibility | 306 |
5.1.2 Selectors in Objective-C | 308 |
5.1.3 Optionals in Swift und Objective-C | 308 |
5.1.4 Arbeiten mit dem Interface Builder | 309 |
5.1.5 Arbeiten mit Core Data Managed Object Subclasses | 310 |
5.1.6 Automatic Bridging | 311 |
5.1.7 Cocoa Design Patterns | 313 |
5.2 Mix and Match | 313 |
5.2.1 Mix and Match innerhalb eines App-Targets | 314 |
5.2.2 Mix and Match innerhalb eines Framework-Targets | 316 |
5.3 Migration | 317 |
6 Swift und Xcode | 320 |
6.1 Installation von Xcode | 320 |
6.2 Erstellen eines neuen Swift-Projekts | 322 |
6.3 Der Grundaufbau von Xcode | 325 |
6.4 Neue Swift-Dateien erstellen | 329 |
6.5 Refactoring – leider nein! | 331 |
6.6 Playgrounds im Detail | 331 |
7 Profi-Wissen und Tipps für die tägliche Arbeit | 336 |
7.1 Zahlenwerte übersichtlicher gestalten | 336 |
7.2 Benennung von Variablen und Konstanten mit Sonderzeichen und Emoticons | 337 |
7.3 Switch für Fortgeschrittene | 338 |
7.3.1 Tuples | 338 |
7.3.2 Value Binding | 339 |
7.3.3 Where | 339 |
7.4 Kurzschreibweise für Abfragen bei return | 340 |
7.5 Custom Operators | 340 |
7.6 Swift-Beispielprojekte | 342 |
Index | 344 |