Inhaltsverzeichnis Inhaltsverzeichnis Vorwort ................................................................................................................................................ TEIL I 23 Swift 1 Hello World! ................................................................................................................... 27 1.1 »Hello World« im Playground ........................................................................................ 28 Voraussetzungen ................................................................................................................ 28 Den Playground starten ................................................................................................... 28 Hello World! ......................................................................................................................... 29 Grafische Darstellung von Daten .................................................................................. 30 Darstellung von Objekten ................................................................................................ 31 Kommentare ........................................................................................................................ 33 »Hello World« als Terminal-App .................................................................................... 34 Xcode kennenlernen .......................................................................................................... 34 Wo ist die App? ................................................................................................................... 37 Mehr als nur »Hello World!« ........................................................................................... 38 Den Swift-Interpreter und -Compiler direkt aufrufen ............................................. 40 Swift-Crashkurs .................................................................................................................. 42 Elementare Syntaxregeln ................................................................................................. 42 Kommentare ........................................................................................................................ 43 Variablen und Konstanten ............................................................................................... 44 Zahlen und Zeichenketten ............................................................................................... 44 Datentypen und Optionals .............................................................................................. 45 Tupel, Arrays und Dictionaries ........................................................................................ 46 1.2 1.3 1.4 Schleifen ................................................................................................................................ 47 Verzweigungen ................................................................................................................... 48 Funktionen ........................................................................................................................... 49 Closures ................................................................................................................................. 50 Klassen und Datenstrukturen ......................................................................................... 51 Xcode-Crashkurs ................................................................................................................. 52 Navigator .............................................................................................................................. 53 Editor ...................................................................................................................................... 54 5 Inhaltsverzeichnis Assistenzeditor .................................................................................................................... 55 Maus- bzw. Trackpad-Kürzel ........................................................................................... 56 Tastenkürzel und Editoreinstellungen ......................................................................... 56 Werkzeugleiste (Inspector und Library Pane) ............................................................. 57 Code-Snippets ..................................................................................................................... 58 Speichern .............................................................................................................................. 59 2 Operatoren ..................................................................................................................... 61 2.1 Zuweisungs- und Rechenoperatoren ........................................................................... 61 Einfache Zuweisung .......................................................................................................... 61 Wert- versus Referenztypen ............................................................................................ 62 Elementare Rechenoperatoren ...................................................................................... 63 Zeichenketten aneinanderfügen ................................................................................... 64 Inkrement und Dekrement .............................................................................................. 65 Rechnen mit Bits ................................................................................................................. 65 Kombinierte Rechen- und Zuweisungsoperationen ................................................ 66 Vergleichsoperatoren und logische Operatoren ....................................................... 66 Vergleichsoperatoren ........................................................................................................ 66 == versus === ....................................................................................................................... 67 Vergleiche mit ~= ................................................................................................................ 68 Datentyp-Vergleich (»is«) ................................................................................................. 68 Casting-Operator (»as«) ................................................................................................... 69 Logische Operatoren .......................................................................................................... 70 2.3 Range-Operatoren ............................................................................................................. 70 Interval-Operatoren ........................................................................................................... 71 2.4 Operatoren für Fortgeschrittene ................................................................................... 72 Ternärer Operator ............................................................................................................... 72 Unwrapping- und Nil-Coalescing-Operator ............................................................... 72 Optional Chaining .............................................................................................................. 73 Operator-Präferenz ............................................................................................................ 74 Operator Overloading ....................................................................................................... 75 Vergleichsoperator für Zeichenketten ......................................................................... 76 3 Variablenverwaltung und Datentypen ...................................................... 77 3.1 Variablen und Konstanten .............................................................................................. 77 2.2 2.5 6 Deklaration von Variablen ............................................................................................... 78 Regeln für Variablennamen ............................................................................................ 78 Konstanten ........................................................................................................................... 79 Inhaltsverzeichnis 3.2 3.3 Eigenschaften ...................................................................................................................... 80 Enumerationen (Enums) .................................................................................................. 81 Zahlen und boolesche Werte .......................................................................................... 83 Ganze Zahlen ....................................................................................................................... 83 Fließkommazahlen ............................................................................................................ 84 Typumwandlungen ............................................................................................................ 84 Zufallszahlen ....................................................................................................................... 85 Boolesche Werte ................................................................................................................. 85 Zeichenketten ..................................................................................................................... 86 String-Eigenschaften ......................................................................................................... 87 Syntax .................................................................................................................................... 88 Funktionen und Methoden zur Bearbeitung von Zeichenketten ......................... 89 Länge von Zeichenketten ermitteln .............................................................................. 90 Vergleichen und sortieren ............................................................................................... 90 Suchen und ersetzen ......................................................................................................... 92 Reguläre Ausdrücke ........................................................................................................... 93 Zeichenketten zerlegen und decodieren ..................................................................... 94 Zeichenketten manipulieren ........................................................................................... 96 Teilzeichenketten extrahieren ........................................................................................ 98 Teilzeichenketten komfortabler auslesen ................................................................... 99 Zahlen formatieren ............................................................................................................ 101 Zahlen mit dem NSNumberFormatter formatieren ................................................ 102 Zeichenketten in Zahlen umwandeln (parsen) ......................................................... 103 Zahlen mit dem NSNumberFormatter parsen .......................................................... 104 3.4 Datum und Uhrzeit ............................................................................................................ 104 3.5 Optionals .............................................................................................................................. 107 3.6 Optionals deklarieren ........................................................................................................ 108 Optionals auslesen ............................................................................................................ 108 nil-Test und if-let ................................................................................................................. 110 Optional Chaining .............................................................................................................. 110 Nil Coalescing ...................................................................................................................... 111 Arrays ..................................................................................................................................... 112 Arrays initialisieren ............................................................................................................ 113 Array-Elemente auslesen ................................................................................................. 114 Arrays manipulieren .......................................................................................................... 115 Arrays sortieren ................................................................................................................... 116 Array-Elemente verarbeiten ............................................................................................ 117 Array-Algorithmen ............................................................................................................. 119 Mehrdimensionale Arrays ............................................................................................... 120 7 Inhaltsverzeichnis 3.7 Dictionaries .......................................................................................................................... 121 Dictionaries deklarieren und initialisieren ................................................................. 121 Zugriff auf Dictionary-Elemente .................................................................................... 122 3.8 Sets ......................................................................................................................................... 122 3.9 Tupel ....................................................................................................................................... 123 Anwendungen ..................................................................................................................... 124 3.10 Einelementige Tupel .......................................................................................................... 125 Interna der Variablenverwaltung .................................................................................. 126 Wert- versus Referenztypen ............................................................................................ 126 Datentypen .......................................................................................................................... 128 Syntaktischer Zucker ......................................................................................................... 128 Typen-Aliase ......................................................................................................................... 129 Datentyp ermitteln und ändern (Casting) .................................................................. 129 Reflection .............................................................................................................................. 130 Speicherverwaltung .......................................................................................................... 131 weak und unowned ........................................................................................................... 132 4 Verzweigungen und Schleifen .......................................................................... 135 4.1 Verzweigungen ................................................................................................................... 135 if ............................................................................................................................................... 135 if-let-Kombination für Optionals ................................................................................... 136 if-let-Kombination mit where ......................................................................................... 137 4.2 4.3 8 switch ..................................................................................................................................... 138 switch für Tupel .................................................................................................................. 139 case-let-Kombination mit where ................................................................................... 140 Schleifen ............................................................................................................................... 141 for ............................................................................................................................................ 141 for-in ....................................................................................................................................... 142 while ....................................................................................................................................... 143 while-let-Kombination ..................................................................................................... 144 do-while ................................................................................................................................ 144 break ....................................................................................................................................... 144 continue ................................................................................................................................ 145 Lottosimulator .................................................................................................................... 145 Version 1: elegant, aber langsam .................................................................................. 146 Einige Benchmarktests ..................................................................................................... 148 Version 2: Swift zeigt, was es kann ............................................................................... 149 Inhaltsverzeichnis 5 Funktionen und Closures ...................................................................................... 151 5.1 Funktionen definieren und ausführen ........................................................................ 151 Benannte Parameter ......................................................................................................... 152 Rückgabewerte ................................................................................................................... 153 Funktionsnamen ................................................................................................................ 154 5.2 5.3 5.4 Gültigkeitsebenen .............................................................................................................. 155 Verschachtelte Funktionen .............................................................................................. 156 Rekursion .............................................................................................................................. 157 Parameter ............................................................................................................................. 157 Gewöhnliche Parameter .................................................................................................. 158 Veränderliche Parameter ................................................................................................. 159 Inout-Parameter ................................................................................................................. 160 Benannte Parameter ......................................................................................................... 160 Optionale Parameter und Defaultwerte ..................................................................... 162 Variable Parameteranzahl (Variadics) .......................................................................... 163 Standardfunktionen .......................................................................................................... 164 Sequenzen bearbeiten ...................................................................................................... 166 Sequenzen zählen und durchsuchen ........................................................................... 168 advance und distance ....................................................................................................... 168 split und join ........................................................................................................................ 169 filter, map, reduce und zip ............................................................................................... 170 Sonstige Funktionen .......................................................................................................... 172 Mathematische Funktionen ............................................................................................ 173 Funktionale Programmierung ........................................................................................ 173 Funktionen als eigener Datentyp .................................................................................. 174 Funktionen als Parameter und Rückgabeergebnisse ............................................... 175 Closures ................................................................................................................................. 177 Syntax .................................................................................................................................... 178 Auto-Closures ...................................................................................................................... 181 RPN-Rechner ........................................................................................................................ 181 Capturing Values ................................................................................................................ 183 6 Objektorientierte Programmierung ............................................................. 185 6.1 Klassen und Strukturen .................................................................................................... 186 Auch Enumerationen sind Datentypen! ...................................................................... 187 Glossar ................................................................................................................................... 187 5.5 Syntax .................................................................................................................................... 188 Das Schlüsselwort »self« .................................................................................................. 190 9 Inhaltsverzeichnis Zugriffsebenen und Zugriffssteuerung ....................................................................... 190 Modifizierer .......................................................................................................................... 192 Verschachtelte Klassen, Strukturen und Enumerationen ...................................... 192 Code-Dateien ....................................................................................................................... 193 6.2 Enumerationen ................................................................................................................... 193 6.3 Eigenschaften ...................................................................................................................... 195 Verzögerte Initialisierung von Eigenschaften (Lazy Properties) ........................... 196 6.4 Eigenschaften beobachten (willSet, didSet) ............................................................... 197 Statische Eigenschaften ................................................................................................... 199 Computed Properties (get und set) ............................................................................... 200 Temperaturumrechnung mit Computed Properties ................................................ 200 Read-Only-Eigenschaften ................................................................................................ 201 Beispiel: Rectangle-Struktur ............................................................................................ 202 Beispiel: ChessFigure-Struktur ....................................................................................... 204 Init- und DeInit-Funktion ................................................................................................. 205 Syntax für Init-Funktionen ............................................................................................... 206 Parameterliste ..................................................................................................................... 206 Code-Reihenfolge in Init-Funktionen ........................................................................... 207 Overloading .......................................................................................................................... 208 Designated versus Convenience Init ............................................................................ 208 Init-Funktion als Optional (Failable Init Functions) .................................................. 209 Deinit-Funktion ................................................................................................................... 210 Methoden ............................................................................................................................. 210 Instanzmethoden ............................................................................................................... 211 Mutating Methods ............................................................................................................. 212 Statische Methoden .......................................................................................................... 214 Benannte Parameter ......................................................................................................... 215 Parameter in globalen Funktionen, Init-Funktionen und Methoden .................. 217 Signaturen von Methoden ............................................................................................... 217 6.6 Subscripts ............................................................................................................................. 219 Beispiel: Schachbrett ......................................................................................................... 219 6.7 Vererbung ............................................................................................................................. 221 Mehrfachvererbung .......................................................................................................... 222 6.5 10 Vererbung versus Protokolle versus Extensions ........................................................ 223 Das Schlüsselwort override ............................................................................................. 224 Das Schlüsselwort super .................................................................................................. 225 Das Schlüsselwort final .................................................................................................... 226 Initialisierung ....................................................................................................................... 227 Das Schlüsselwort required ............................................................................................. 228 Inhaltsverzeichnis 6.8 6.9 6.10 6.11 Redundanz in Init-Funktionen vermeiden .................................................................. 229 Generalisierung, Polymorphie und Casting ................................................................ 230 Generics ................................................................................................................................. 232 Syntax .................................................................................................................................... 233 Generics in der Swift-Standardbibliothek ................................................................... 233 Regeln für generische Typen (Type Constraints) ....................................................... 235 Protokolle ............................................................................................................................. 236 Vorhandene Protokolle implementieren ..................................................................... 236 Selbst Protokolle definieren ............................................................................................ 237 Protokolle sind Datentypen ............................................................................................. 239 Beispiel .................................................................................................................................. 239 Optionale Protokollanforderungen ............................................................................... 241 Generische Protokolle mit »typealias« ......................................................................... 243 Standardprotokolle ........................................................................................................... 244 Printable ................................................................................................................................ 245 Hashable und Equatable .................................................................................................. 246 Comparable .......................................................................................................................... 247 Any und AnyObject ............................................................................................................ 248 AnyClass ................................................................................................................................ 249 StringLiteralConvertible ................................................................................................... 250 Extensions ............................................................................................................................ 251 Syntax .................................................................................................................................... 252 Übersichtlicherer Code durch Protokoll-Extensions ................................................ 254 Beispiel: Rechnen mit Kilo-, Mega- und Gigabyte .................................................... 255 6.12 Metatypen ............................................................................................................................ 256 7 Spezialfunktionen ..................................................................................................... 259 7.1 Fehler und Exceptions ....................................................................................................... 259 Swifts Verhalten beim Auftreten von Fehlern ........................................................... 259 Umgang mit NSError-Objekten ...................................................................................... 260 Umgang mit Fehlern in eigenen Funktionen und Methoden ............................... 262 Umgang mit Fehlern in eigenen Typen ........................................................................ 264 assert ...................................................................................................................................... 265 Exceptions auslösen .......................................................................................................... 266 Module, Frameworks und Importe ............................................................................... 267 Selbst Frameworks erzeugen .......................................................................................... 267 7.3 Attribute ............................................................................................................................... 268 7.4 Systemfunktionen aufrufen ........................................................................................... 269 7.2 11 Inhaltsverzeichnis TEIL II iOS 8 Hello iOS-World! ......................................................................................................... 273 8.1 Projektstart .......................................................................................................................... 274 8.2 Gestaltung der App ........................................................................................................... 274 Mini-Glossar ........................................................................................................................ 275 8.3 8.4 8.5 8.6 Steuerelemente einfügen ................................................................................................ 276 Ein erster Test mit dem iOS-Simulator ......................................................................... 277 Steuerung der App durch Code ...................................................................................... 279 Den Button mit einer Methode verbinden (Actions) ............................................... 279 Zugriff auf das Textfeld über eine Eigenschaft (Outlets) ........................................ 282 Endlich eigener Code ......................................................................................................... 283 Actions und Outlets für Fortgeschrittene ................................................................... 284 Eine Action für mehrere Steuerelemente ................................................................... 284 Ein Outlet für mehrere Steuerelemente (Outlet Collections) ................................ 285 Actions oder Outlets umbenennen .............................................................................. 285 Steuerelemente kopieren ................................................................................................. 286 Layout optimieren ............................................................................................................. 286 Layoutregeln ........................................................................................................................ 287 Layoutregeln für den »Hello-World«-Button ............................................................. 288 Layoutregeln für das Textfeld ......................................................................................... 289 Wenn es Probleme gibt .................................................................................................... 290 Textgröße mit einem Slider einstellen ........................................................................ 291 Das Slider-Steuerelement hinzufügen ......................................................................... 291 Den Slider mit einer Methode verbinden .................................................................... 292 8.7 Apps auf dem eigenen iPhone/iPad ausführen ........................................................ 293 8.8 Komponenten und Dateien eines Xcode-Projekts ................................................... 295 Weitere Dateien .................................................................................................................. 297 Test- und Produktgruppe .................................................................................................. 297 9 iOS-Grundlagen ........................................................................................................... 299 9.1 Model-View-Controller (MVC) ........................................................................................ 299 Kommunikation in MVC-Apps ........................................................................................ 301 MVC bei Apps mit mehreren Dialogen ......................................................................... 302 Klassenhierarchie einer App-Ansicht ........................................................................... 303 9.2 12 Inhaltsverzeichnis 9.3 9.4 9.5 9.6 9.7 9.8 Die UIViewController-Klasse .......................................................................................... 307 Lebenszyklus eines View-Controllers ............................................................................ 307 Init-Funktion ........................................................................................................................ 308 viewDidLoad-Methode ..................................................................................................... 309 Phasen einer iOS-App ....................................................................................................... 311 Die AppDelegate-Klasse ................................................................................................... 311 Zugriff auf den Root-View-Controller und das AppDelegate-Objekt .................. 313 Auto Layout .......................................................................................................................... 314 Grundeinstellungen .......................................................................................................... 314 Viele Wege führen zum Ziel ............................................................................................ 315 Live-Vorschau in der Preview-Ansicht .......................................................................... 316 Layoutregeln im Storyboard-Editor einstellen ........................................................... 318 Layoutregeln manuell einstellen ................................................................................... 320 Layoutregeln aus der aktuellen Position und Größe ableiten ............................... 321 Regeln ändern und löschen, Steuerelemente neu positionieren ......................... 322 Layoutprobleme in der Document-Outline-Seitenleiste beheben ...................... 323 Layoutregeln im Size Inspector bearbeiten ................................................................ 325 Layoutdetails im Attributinspektor modifizieren ..................................................... 326 Layouts für verschiedene iOS-Geräteklassen (Size Classes) .................................. 327 Tipps und Tricks ................................................................................................................... 328 Layoutregeln mit Code definieren ................................................................................. 329 Daten persistent speichern ............................................................................................. 331 User-Defaults ....................................................................................................................... 332 Umgang mit Dateien ......................................................................................................... 334 Zugriff auf Bundle-Dateien ............................................................................................. 335 Beispiel .................................................................................................................................. 336 Mehrsprachige Apps .......................................................................................................... 339 Localization versus Internationalization ..................................................................... 339 Defaulteinstellungen in Xcode ....................................................................................... 339 Deutsch als primäre Sprache einstellen ...................................................................... 340 Sprache hinzufügen ........................................................................................................... 341 Lokalisierungsdateien exportieren ................................................................................ 342 Lokalisierungsdateien bearbeiten ................................................................................. 343 Übersetzte Dateien wieder importieren ..................................................................... 344 Die App in verschiedenen Lokalisierungen ausprobieren ...................................... 344 Internationalisierung im Code ....................................................................................... 346 iOS-Crashlogs ...................................................................................................................... 347 13 Inhaltsverzeichnis 10 Apps mit mehreren Ansichten .......................................................................... 349 10.1 Storyboard und Controller-Klassen verbinden ......................................................... 349 10.2 Ansichten durch Segues verbinden .............................................................................. 351 Welcher Segue-Typ ist der richtige? .............................................................................. 352 Zurück an den Start mit Unwind ................................................................................... 353 10.3 10.4 10.5 10.6 Segues mit Datenübertragung ...................................................................................... 355 Segue-Code für »View 1« ................................................................................................. 357 Segue-Code für »View 2« ................................................................................................. 358 Segues per Code auslösen ............................................................................................... 359 Tastatureingaben mit Delegation verarbeiten ......................................................... 360 Beispiel .................................................................................................................................. 361 Navigation-Controller ....................................................................................................... 362 Funktionsweise ................................................................................................................... 362 Einstellungen ....................................................................................................................... 363 Steuerung per Code ........................................................................................................... 364 Beispiel .................................................................................................................................. 365 Tab-Bar-Controller ............................................................................................................. 366 Tab-Bar-Items ...................................................................................................................... 367 Kombination aus Tab-Bar- und Navigation-Controller ........................................... 369 Programmierung ................................................................................................................ 370 Bild-Management in Images.xcasset ........................................................................... 372 Zugriff auf Images.xcasset per Code ............................................................................ 373 App-Icon ................................................................................................................................ 374 11 GPS- und Kompassfunktionen .......................................................................... 375 11.1 Hello MapView! .................................................................................................................. 375 MapKit-Framework ............................................................................................................ 375 Um Erlaubnis fragen .......................................................................................................... 376 Info.plist-Einstellungen .................................................................................................... 377 10.7 11.2 14 Erste Tests ............................................................................................................................. 378 Kartenfunktionen im iOS-Simulator ............................................................................. 378 Wegstrecke aufzeichnen .................................................................................................. 380 Programmaufbau und Auto Layout .............................................................................. 380 Die ViewController-Klasse ............................................................................................... 381 Initialisierung in viewDidLoad ........................................................................................ 382 Inhaltsverzeichnis 11.3 11.4 locationManager-Delegate ............................................................................................. 383 Die mapView-Methode ..................................................................................................... 386 Erweiterungsmöglichkeiten ............................................................................................ 386 Kompassfunktionen .......................................................................................................... 387 Kompasskalibrierung ........................................................................................................ 388 Grafische Darstellung eines Kompasses ..................................................................... 389 Eigene Steuerelemente mit Grafikfunktionen ......................................................... 389 Eine Klasse für ein neues Steuerelement .................................................................... 389 Grafikprogrammierung .................................................................................................... 390 Das Steuerelement verwenden ...................................................................................... 391 Eine richtige CompassView ............................................................................................. 392 Automatischer Redraw bei Größenänderung ............................................................ 395 Kompassnadel einstellen ................................................................................................. 396 Den Kompass an die Ausrichtung des Geräts anpassen ........................................ 396 Xcode-Integration mit IBDesignable und IBInspectable ........................................ 398 12 To-do-Listen ................................................................................................................... 401 12.1 Popups ................................................................................................................................... 401 Hello Popup! ........................................................................................................................ 401 Popups auch auf dem iPhone ......................................................................................... 403 Größe des Popups einstellen ........................................................................................... 404 Popup-Richtung festlegen ............................................................................................... 406 Popups per Code anzeigen und entfernen ................................................................. 407 Unwind für Popups ............................................................................................................ 409 12.2 Ja-Nein-Dialoge (UIAlertController) ............................................................................. 410 12.3 Listen (UITableView) ......................................................................................................... 412 Hello UITableView! ............................................................................................................. 413 12.4 12.5 Listenzellen mit Bild und Zusatzinformationen ........................................................ 417 Individuelle Gestaltung der Listenelemente (UITableViewCell) .......................... 420 Detailansicht zu Listeneinträgen ................................................................................... 423 Veränderliche Listen .......................................................................................................... 426 Die Methode reloadData .................................................................................................. 426 Edit-Modus ........................................................................................................................... 427 Gestaltung der Benutzeroberfläche ............................................................................. 427 Beispiele ................................................................................................................................ 427 15 Inhaltsverzeichnis 12.6 To-do-App ............................................................................................................................. 428 Auto Layout .......................................................................................................................... 428 Datenmodell ........................................................................................................................ 429 Outlets und Initialisierung ............................................................................................... 430 Button- und Gesture-Methoden .................................................................................... 431 Popup-Dialog anzeigen .................................................................................................... 433 Listeneintrag hinzufügen oder ändern ........................................................................ 434 DataSource-Methoden ..................................................................................................... 435 Popup-View-Controller ..................................................................................................... 437 13 Schatzsuche ................................................................................................................... 439 13.1 Aufbau der App ................................................................................................................... 439 Aufbau und Storyboard .................................................................................................... 441 Layout-Regeln ...................................................................................................................... 442 13.2 13.3 Funktion zur Darstellung geografischer Daten ......................................................... 442 Projekteinstellungen ......................................................................................................... 443 Datenmodell ........................................................................................................................ 443 Basisklasse und Protokolle ............................................................................................... 444 Das Protokoll printable ..................................................................................................... 444 Das Protokoll NSCoding .................................................................................................... 445 Array speichern und wieder einlesen (NSKeyedArchiver) ...................................... 445 Location Manager selbst gemacht ................................................................................ 447 Die Init-Funktion ................................................................................................................. 448 Kommunikation über das Notification Center .......................................................... 448 13.4 Steuerelement zur Richtungsanzeige (UIBezierPath) ............................................. 451 13.5 Hauptansicht mit Listenfeld ........................................................................................... 452 Outlets, Eigenschaften und Initialisierung ................................................................. 452 DataSource-Anbindung .................................................................................................... 453 Segues vom und zum Speichern-Popup, neuen Eintrag speichern ..................... 454 Segue vom und zum Detaildialog ................................................................................. 456 13.6 Popup-Dialog zum Speichern ......................................................................................... 457 13.7 Detailansicht mit Richtungspfeil ................................................................................... 458 Auto Layout .......................................................................................................................... 459 Initialisierung der Controller-Klasse ............................................................................. 460 16 Abstand und Richtung zum Zielpunkt errechnen .................................................... 461 Listeneintrag löschen bzw. ändern ............................................................................... 462 Inhaltsverzeichnis 14 Währungskalkulator ................................................................................................ 465 14.1 App-Überblick ..................................................................................................................... 465 Storyboard und Klassen .................................................................................................... 467 Auto Layout in der Umrechnungsansicht ................................................................... 467 Auto Layout in der Einstellungsansicht ....................................................................... 469 Bildkataloge ......................................................................................................................... 470 Erweiterungsmöglichkeiten ............................................................................................ 470 XML-Dokumente lesen ..................................................................................................... 471 Die SWXMLHash-Bibliothek ............................................................................................ 472 14.2 14.3 14.4 14.5 Das Datenmodell der App ............................................................................................... 474 Init-Funktion ........................................................................................................................ 474 Wechselkurse im Cache-Verzeichnis speichern ........................................................ 475 Kursumrechnung ................................................................................................................ 477 Länderkürzel aus Währungskürzeln extrahieren ...................................................... 477 Umrechnungsansicht ........................................................................................................ 477 Property Observer für die Währungskürzel ................................................................ 478 Initialisierung in viewDidLoad ........................................................................................ 479 Das CurCalc-Objekt initialisieren und das Datum der Kurse anzeigen .............. 480 Ungültige Tastatureingaben vermeiden ..................................................................... 481 Tap Gesture Recognizer .................................................................................................... 482 Währungsumrechnung bei der Texteingabe ............................................................. 483 Einstellungsansicht ........................................................................................................... 484 Picker-Views (UIPickerView-Klasse) ............................................................................... 484 Outlets, Eigenschaften und viewDidLoad ................................................................... 484 Picker-View mit Daten füllen .......................................................................................... 486 Auswahl eines Picker-View-Elements ........................................................................... 488 14.6 Startansicht (Launch Screen) .......................................................................................... 489 14.7 App-Icon ................................................................................................................................ 490 App-Name ............................................................................................................................ 491 14.8 Internationalisierung und Lokalisierung .................................................................... 491 14.9 App im App Store einreichen .......................................................................................... 492 App-Store-Regeln ............................................................................................................... 493 Bundle-ID (Xcode) .............................................................................................................. 494 App-ID erzeugen (Apple Developer) ............................................................................. 494 App einrichten (iTunes Connect) .................................................................................... 495 App-Daten ausfüllen (iTunes Connect) ........................................................................ 497 Distribution Provisioning Profile erzeugen (Apple Developer) ............................. 498 App-Upload (Xcode) .......................................................................................................... 500 Warten auf das Okay von Apple ..................................................................................... 500 17 Inhaltsverzeichnis TEIL III OS X 15 Hello OS-X-World! ..................................................................................................... 505 15.1 Von iOS zu OS X .................................................................................................................. 505 Gemeinsamkeiten .............................................................................................................. 505 Unterschiede ....................................................................................................................... 506 Windows versus View-Controller .................................................................................. 506 Storyboards .......................................................................................................................... 507 Lottozahlengenerator (Storyboard-Variante) ........................................................... 508 Projekt einrichten ............................................................................................................... 509 Gestaltung der Benutzeroberfläche ............................................................................. 509 Effizient arbeiten mit Kopieren und Einfügen ........................................................... 511 Fenstergröße und Fenstertitel einstellen .................................................................... 512 viewDidLoad und representedObject ........................................................................... 513 Outlets und Actions ........................................................................................................... 514 Die Lotto-Klasse .................................................................................................................. 515 Die View-Controller-Klasse .............................................................................................. 516 15.2 15.3 15.4 Programmende ................................................................................................................... 517 Lottozahlengenerator (XIB/AppDelegate-Variante) ............................................... 518 XIB-Dateien .......................................................................................................................... 518 Organisation des Projekts ................................................................................................ 519 Die AppDelegate-Klasse ................................................................................................... 520 Eigener Code ........................................................................................................................ 520 Programmende ................................................................................................................... 522 Lottozahlengenerator (XIB/WindowController-Variante) .................................... 523 Window-Controller mit XIB-Datei ................................................................................. 523 Das Fenster in der AppDelegate-Klasse anzeigen .................................................... 524 Windows-Controller-Code ............................................................................................... 525 Programmende ................................................................................................................... 526 Lottozahlengenerator (XIB/ViewController-Variante) ........................................... 527 Das Fenster mit dem View-Controller verbinden ..................................................... 528 Controller-Code ................................................................................................................... 529 16 OS-X-Grundlagen ....................................................................................................... 531 16.1 Programme mit mehreren Fenstern ............................................................................. 531 15.5 18 Segues .................................................................................................................................... 532 Datenübergabe mit der Methode prepareForSegue ................................................ 534 Inhaltsverzeichnis 16.2 16.3 16.4 16.5 16.6 Fenstergröße fixieren ........................................................................................................ 536 Window-Eigenschaften des Ziel-Controllers einstellen ......................................... 537 Ansichten/Fenster schließen .......................................................................................... 537 Segues per Code ausführen ............................................................................................. 538 Fenster per Code erzeugen .............................................................................................. 538 Tab-View-Controller .......................................................................................................... 539 Storyboard und Tab-View-Controller-Einstellungen ................................................ 541 Dialogblattgröße ................................................................................................................ 542 Segues .................................................................................................................................... 542 Splitter-Steuerelement ..................................................................................................... 543 Klassen ................................................................................................................................... 543 Application Defaults mit den User-Defaults verbinden (AppDelegate.swift) .. 543 Textgröße aus den User-Defaults lesen (ViewController.swift) ............................ 545 Einstellungen ändern (SettingsGeneralVC.swift) ..................................................... 546 User-Defaults-Interna ....................................................................................................... 547 Standarddialoge ................................................................................................................. 548 Nachrichten anzeigen und Ja/Nein-Entscheidungen treffen ............................... 549 Datei- und Verzeichnisauswahl ..................................................................................... 549 Schrift einstellen ................................................................................................................. 550 Farbe einstellen ................................................................................................................... 551 Maus ....................................................................................................................................... 552 Mausereignisse ................................................................................................................... 553 Koordinatensysteme, Bounds und Frames ................................................................. 553 Mausposition ergründen ................................................................................................. 554 Statustasten ......................................................................................................................... 555 Beispielprogramm .............................................................................................................. 555 Die MyView-Klasse ............................................................................................................. 556 Die drawRect-Methode ..................................................................................................... 557 Die mouseDown-Methode .............................................................................................. 559 Tastatur ................................................................................................................................. 560 Die NSResponder-Klasse .................................................................................................. 561 Tastaturereignisse .............................................................................................................. 562 Beispielprogramm .............................................................................................................. 563 Menüs .................................................................................................................................... 566 Die Responder-Kette .......................................................................................................... 566 Gestaltung der Menüleiste .............................................................................................. 568 Responder-Aktionen .......................................................................................................... 569 Menüaktionen in der AppDelegate-Klasse ................................................................. 569 Menüaktionen in eigenen View-Klassen ..................................................................... 571 19 Inhaltsverzeichnis 16.7 Veränderung von Menüeinträgen per Code ............................................................... 572 Kontextmenüs ..................................................................................................................... 573 Programme ohne Menü ................................................................................................... 574 Menubar-Apps .................................................................................................................... 575 Die AppDelegate-Klasse ................................................................................................... 575 View-Controller ................................................................................................................... 577 Bindings ................................................................................................................................ 577 Hello Bindings! .................................................................................................................... 578 Sonderfälle ........................................................................................................................... 579 17 Icon-Resizer .................................................................................................................... 581 17.1 Tabellen (NSTableView) .................................................................................................... 581 Hello NSTableView! ............................................................................................................ 582 Table-View mit eigenen Views ....................................................................................... 585 Programmaufbau und Country-Klasse ........................................................................ 586 Table-View-Code ................................................................................................................. 588 Die Tabelle mit Daten füllen ........................................................................................... 588 Tabelle sortieren ................................................................................................................. 591 Auswahl einer Zeile ........................................................................................................... 592 Drag & Drop ......................................................................................................................... 592 16.8 17.2 17.3 17.4 20 Drag-Operationen empfangen (NSDraggingDestination) ..................................... 593 Drag-Operationen initiieren (NSDraggingSource) .................................................... 594 Beispielprogramm .............................................................................................................. 594 Projektaufbau ...................................................................................................................... 595 View-Controller ................................................................................................................... 595 Die MyView-Klasse ............................................................................................................. 596 Drag & Drop initiieren ....................................................................................................... 598 Drag&Drop-Empfang zulassen ...................................................................................... 601 Drag&Drop-Empfang verarbeiten ................................................................................. 603 Icon-Resizer .......................................................................................................................... 605 Programmaufbau ............................................................................................................... 605 Das Split-View-Steuerelement ....................................................................................... 606 Layoutregeln für das Hauptfenster ............................................................................... 608 Popup-Menü ........................................................................................................................ 609 Erweiterungsmöglichkeiten ............................................................................................ 609 Arbeiten mit Bitmaps (IconSize-Struktur) .................................................................. 610 Enumerationen ................................................................................................................... 610 IconSize-Struktur ................................................................................................................ 610 Initialisierung von IconSize-Arrays ................................................................................ 611 Inhaltsverzeichnis 17.5 Bitmaps skalieren ............................................................................................................... 612 Bitmaps im PNG-Format speichern .............................................................................. 613 Hauptfenster (ViewController.swift) ........................................................................... 614 viewDidLoad mit dem Aufruf von unregisterDraggedTypes ................................. 615 Popup- und Speicher-Buttons, Programmende ........................................................ 616 Split-View-Delegation ....................................................................................................... 618 Table-View-Datenquelle ................................................................................................... 618 17.6 Drag&Drop-Quelle für Icons (IconCellView.swift) ................................................... 621 17.7 Drag&Drop-Empfänger für Icons (OriginalIconView.swift) .................................. 622 Drag & Drop einer Bilddatei empfangen ..................................................................... 623 Dateiauswahldialog für die Bilddatei ........................................................................... 624 17.8 Popup-Menü (IconChoiceVC.swift) ............................................................................... 625 17.9 Temporäres Verzeichnis erstellen und löschen (AppDelegate.swift) ................. 626 Ein eigenes temporäres Verzeichnis einstellen ......................................................... 627 Temporäres Verzeichnis löschen .................................................................................... 628 Index ................................................................................................................................... 629 21
© Copyright 2024