Inhaltsverzeichnis

Impressum

Referenzkarte

Danksagung

Einleitung

Kapitel 1: Datentypen und Optionals

1.1 Willkommen auf dem Spielplatz

1.2 Variablen und Konstanten

1.3 Zahlendatentypen konvertieren

1.4 Werte runden

1.5 Minimum und Maximum

1.6 Der Datenyp Bool

1.7 Optionals

1.8 Programmieren mit Optionals

Kapitel 2: Zeichenketten des Typs String

2.1 String-Interpolation

2.2 Zeichenketten vergleichen

2.3 Textabschnitte finden und ersetzen

2.4 Zeichenketten in Zahlentypen konvertieren

2.5 Die Klasse NSNumber

2.6 Texte teilen

2.7 Subscripting mit Unicode

2.8 Anfang und Ende von Zeichenketten

Kapitel 3: Arrays und Dictionaries

3.1 Arrays – Listen von Elementen

3.2 Arrays sortieren und filtern

3.3 Dictionaries, die schnellen Wörterbücher

Kapitel 4: Fallunterscheidungen und Schleifen

4.1 Die if-Struktur

4.2 Die switch-case-Struktur

4.3 Die for-Schleife

4.4 Schleifen und Array

4.5 Rückwärts durch die for-Schleife

4.6 Die while-Schleife

4.7 Schleifen mit Fallunterscheidungen

4.8 Diagramme im Ausgabebereich

4.9 Gültigkeitsbereiche

Kapitel 5: Funktionen

5.1 Die erste Funktion

5.2 Benannte Parameter

5.3 Funktionen mit Rückgabewert

5.4 Tupel und anonyme Typen

5.5 Eine unbestimmte Anzahl von Parametern

5.6 Funktionen mit Standardwerten

5.7 Parameter sind unveränderlich

Kapitel 6: Closures

6.1 Closures sind Funktionen

6.2 Closures als Parameter

6.3 Arrays sortieren mit Closures

6.4 Variablen einfangen

6.5 Asynchrone Closures mit Grand Central Dispatch

6.6 Parallele Verarbeitung

6.7 Asynchrone Aufrufe mittels ​Completion-Handler

Kapitel 7: Klassen und Objekte

7.1 Das erste Projekt

7.2 Erste Schritte im Workspace-Fenster

7.3 Die Klasse Person

7.4 Von der Klasse zum Objekt

7.5 Eigenschaften und Punktnotation

7.6 Berechnete Eigenschaften mit Getter und Setter

7.7 Eigenschaften beobachten

Kapitel 8: Methoden

8.1 Methoden zur Initialisierung

8.2 Failable Initializers – Wenn es mal schiefgeht

8.3 Methoden zu Deinitialisierung

8.4 Klassenmethoden

8.5 Methoden kontra Eigenschaften

Kapitel 9: Vererbung und Assoziationen

9.1 Das Erbe der Klasse Person

9.2 Erweiterungen der abgeleiteten Klasse

9.3 Methoden überschreiben

9.4 Die Initialisierung abgeleiteter Klassen

9.5 Assoziationen – Beziehungen zwischen Objekten

9.6 Optional-Chaining

9.7 Der Coalescing-Operator

Kapitel 10: Protokolle und Extensions

10.1 Ein eigenes Protokoll entwickeln

10.2 Protokolle statt Datentypen

10.3 Optionale Protokolle

10.4 Extensions

Kapitel 11: Strukturen und Enumerationen

11.1 Zurück zum Spielplatz

11.2 Strukturen oder Klassen?

11.3 String Dependencies – Abhängigkeiten von Zeichenketten

11.4 Enumerationen​

11.5 Enumerationen mit Methoden

Kapitel 12: Lotto – 6 aus 49

12.1 MVC: Model-View-Controller

12.2 Projektvorlage – Cocoa Application

12.3 Der Lottozahlengenerator

12.4 Der Interface Builder

12.5 Inspector und Bibliothek

12.6 Arbeiten mit dem Interface Builder

12.7 Der Controller

12.8 Zurück zum Interface Builder

12.9 Das war es jetzt schon?

12.10 One more thing ...

Swift Lexikon

Einführung in Swift

Holger Hinzberg

Impressum

Bibliografische Information der Deutschen Nationalbibliothek

Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über <http://dnb.d-nb.de> abrufbar.

ISBN 978-3-95845-004-2

1. Auflage 2015

www.mitp.de

E-Mail: mitp-verlag@sigloch.de

Telefon: +49 7953 / 7189 - 079

Telefax: +49 7953 / 7189 - 082

© 2015 mitp Verlags GmbH & Co. KG

Dieses Werk, einschließlich aller seiner Teile, ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlages unzulässig und strafbar. Dies gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen.

Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften.

Lektorat: Sabine Schulz

Sprachkorrektorat: Knut Lorenzen

Coverbild: © Max Krasnov

electronic publication: III-satz, Husby, www.drei-satz.de

Dieses Ebook verwendet das ePub-Format und ist optimiert für die Nutzung mit dem iBooks-reader auf dem iPad von Apple. Bei der Verwendung anderer Reader kann es zu Darstellungsproblemen kommen.

Der Verlag räumt Ihnen mit dem Kauf des ebooks das Recht ein, die Inhalte im Rahmen des geltenden Urheberrechts zu nutzen. Dieses Werk, einschließlich aller seiner Teile, ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheherrechtsgesetzes ist ohne Zustimmung des Verlages unzulässig und strafbar. Dies gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und Einspeicherung und Verarbeitung in elektronischen Systemen.

Der Verlag schützt seine ebooks vor Missbrauch des Urheberrechts durch ein digitales Rechtemanagement. Bei Kauf im Webshop des Verlages werden die ebooks mit einem nicht sichtbaren digitalen Wasserzeichen individuell pro Nutzer signiert.

Bei Kauf in anderen ebook-Webshops erfolgt die Signatur durch die Shopbetreiber. Angaben zu diesem DRM finden Sie auf den Seiten der jeweiligen Anbieter.

Referenzkarte

Variablen und Konstanten

// Variablen und Konstanten
var variableValue = 3.1415
variableValue = 3.0
let constValue = 42
// Neue Zuweisung nicht möglich
// constValue = 50

Fallunterscheidungen

var salary = 10000
if salary > 15000
{
 println("Zu viel")
}
else if salary < 10000
{
 println("Zu wenig")
}
else
{
 println("Ok")
}

var index = 4
switch index
{
 case 1:
 println("Index ist 1")
 case 2:
 println("Index ist 2")
 case 3...5:
 println("Index liegt zwischen 3 und 5")
 case 6:
 println("Index ist 6")
 fallthrough
 default:
 println("Index liegt nicht zwischen 1 bis 5")
}

Schleifen

for var index = 0; index <= 5; index++
{
 println(index) // Ausgabe von 0 bis 5
}

for index in 0...5 // Closed Range
{
 println(index) // Ausgabe von 0 bis 5
}

for index in 0..<5 // Half Open Range
{
 println(index) // Ausgabe von 0 bis 4
}

for index in reverse(5...10)
{
 println(index) // Ausgabe von 10 bis 5
}

var access = 1
do
{
 println(access) // Ausgabe von 1 bis 9
 access++
}
while access < 10

Array

var cities:[String] = ["Rom","Paris","Berlin"]
cities.append("London")

for city in cities
{
 println(city) // Ausgabe aller Städtenamen
}

var count = countElements(cities) // Anzahl der Elemente

Methoden / Funktionen

// Ohne Parameter und ohne Rückgabewert
func doSomething()
{
 println("Hello World!")
}

doSomething()

// Mit einem Double als Parameter und einem Double
// als Rückgabewert
func doSomething(value:Double) -> Double
{
 return value * 2.0
}

var twice = doSomething(4.5)

// Mit zwei Double-Typen als benannte Parameter
// und einem Double als Rückgabewert
func doSomething(#first:Double, #second:Double) -> Double
{
 return first + second
}

var sum = doSomething(first: 3.2, second: 4.7)

Dictionary

var animals:[Int: String] = [11:"Hund", 22:"Katze", 33:"Maus"]
animals[22] = "Elefant" // Element ersetzen
animals[99] = "Huhn" // Element anfügen
println(animals[22]) // Ausgabe "Optional (Elefant)"
println(animals[99]) // Ausgabe "Optional (Huhn)"
animals[11] = nil // Element entfernen

Zeichenketten

var firstName = "Mike"
var lastName = "Müller"
// String Interpolation
println("Meine Name ist \(firstName) \(lastName).")

// Zahlenwerte formatieren
var numeric = 3.34983632
var num = String(format:"%.2f", numeric) // Ausgabe 3.35

Enumerationen

enum Color
{
 case Red
 case Green
 case Blue
}
var exterior:Color = Color.Green

Klassen

class Person
{
 // Eigenschaften
 var firstName:String
 var lastName:String
 init()
    {
 // Eigenschaften initialisieren
 firstName = ""
 lastName = ""
    }
}

// Klasseninstanz erzeugen und
// Eigenschaften zuweisen
var pers = Person()
pers.firstName = "Mike"
pers.lastName = "Müller"

Danksagung

Eine Danksagung für ein Buch zu schreiben, ist für mich keine leichte Aufgabe, denn es ist nicht einfach, die richtigen Worte zu finden und niemanden zu vergessen. Obwohl ich inzwischen seit mehreren Jahren mit meinem Team zusammenarbeite, ist es immer wieder eine Herausforderung, alle Mitstreiter angemessen zu würdigen. Die Namen von Freunden und Familienmitgliedern, die in den letzten Monaten oft auf mich verzichten mussten, habe ich vorsichtshalber schon beim Schreiben der Beispiele im Programmcode untergebracht.

An erster Stelle geht mein Dank an Horst Andreas Roemer, denn dieses Buch enthält sehr viele seiner Erfahrungen aus dem Alltag eines Softwareentwicklers. Unsere kreative Zusammenarbeit war wieder ein großer Spaß!

Dank geht an meinen Freund Peter Mekelburg, der schon seit vielen Jahren bereitwillig alle meine Texte prüft und mich davor bewahrt, durch zu viele fehlende Satzzeichen und zu komplizierte Sätze unangenehm aufzufallen.

Unverzichtbar im Team ist meine geduldige Lektorin Sabine Schulz, die mir erneut die Gelegenheit gab, meine Ideen und Erfahrungen als Buch zu veröffentlichen. Ich danke ihr, auch stellvertretend für alle Mitwirkenden in der Korrektur, im Satz und in der Produktion.

Mein besonderer Dank geht an alle Leser meiner Bücher, von denen ich einige inzwischen persönlich auf Konferenzen und Seminaren kennenlernen durfte. Auch mit Swift bleibt die Softwareentwicklung ein spannendes Thema. Ich hoffe, wir werden noch viele Jahre zusammen Spaß haben!

Holger Hinzberg
Holzwickede, Februar 2015

Einleitung

Schnell, modern und sicher.

Mit diesen drei Eigenschaften wurde die Programmiersprache Swift beschrieben, als sie am 1. Juni 2014 auf der WWDC-Konferenz in San Francisco erstmalig der Öffentlichkeit vorgestellt wurde. Für die Entwickler war dies eine große Überraschung, denn seit über 20 Jahren wurde bei der Firma Apple mit Objective-C programmiert, einer Sprache, die sich besonders in den letzten Jahren steigender Beliebtheit erfreute. Sollte jetzt alles neu und anders werden? Die Antwort auf diese Frage ist einfach: Ja!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!