GamesiOSMobile

Swift Schnelleinstieg

Mit Swift ist den Entwicklern bei Apple, meiner Meinung nach, ein großer Wurf gelungen. Auf der WWDC14 im Juni 2014 vorgestellt sind wir aktuell bei Version 3.0. Da Objective-C schon über 30 Jahre alt ist hält es nicht mehr ganz mit modernen Programmierkonzepten mit. Swift ist kurz und klar gefasst und reagiert besser auf Fehler. Swift ist für die Arbeit mit Cocoa und Cocoa Touch entwickelt worden und kann mit Objective-C gemeinsam genutzt werden. Für alle die sich einfach nur mal in der iOS Entwicklung versuchen möchten gibt es seit Xcode 7 eine tolle Neuerung. Du kannst ohne teuren Developer Account deine App auf dein Gerät laden und testen.

Variablen & Konstanten

var bikes = 4     // die Variable Bikes repräsentiert die Anzahl der Fahrräder eines Spielers
bikes = 1         // die Variable ändert sich auf 1, da die Freundin des Spielers mehr Platz im Keller benötigt

Der Compiler weiß in diesem Fall implizit, dass es sich um eine Ganzzahl vom Typ Int handelt. Man kann den Datentyp Int aber auch explizit angeben:

var bikes: Int = 3

In Spielen oder anderen Anwendungen gibt es meist auch Daten die sich während der Laufzeit nicht ändern.

let gravity = -9.8 // Wert für die Gravitation im Physikalischen Raum
let winMessage: String = „You Win! // explizite Deklaration der Gewinnnachricht

Tip - Konstanten

Warum nicht immer Variablen verwenden? – Konstanten sind viel effizienter als Variablen und sollten auch genutzt werden wenn sich Werte nicht ändern. Vor allem bei speicherintensiven Apps wie Spiele ist die Performance ein wichtiges Qualitätskriterium.

Man wird auch immer höflichst von Xcode darauf hingewiesen besser Konstanten zu verwenden wenn sich der Inhalt nach der Initialisierung nicht geändert hat.

Hinweis

Swift ist case-sensitiv!

Datentypen

Übersicht

Int: Integers – ganze Zahlen von -2.147.483.648 bis +2.147.483.647

Float: Fließkommazahlen („.“) mit 6 Stellen und 32 Bit

Double: Fließkommazahlen („.“) mit 15 Stellen und 64 Bit

String: Sammlung von Zeichen (Zahlen, Buchstaben & Symbole/Emojis)

Bool: Wahrheitswert (true oder false)

Strings

var playerName: String = "Moritz"

Zwei oder mehrer Zeichenketten werden mit dem „+“ Operator verbunden:

var teamName = playerName + " Leonhard"

Um bestehende Zeichenketten mit Rückgabewerten von Funktionen oder anderen Datentypen zu kombinieren gibt es in Swift den Prozess der String Interpolation:

var playerAge: Int = 12
var gameMessage: String = "The Player \(playerName) is \(playerAge) years old."

String - Characters

Strings sind eigentlich eine Sammlung von kleineren Datenelementen – den Characters.

NS-Datentypen

Du kannst in Swift auch weiterhin die Datentypen des Froundation Frameworks verwenden, z.B.: NSString, NSNumber, NSDate, NSRange, …

Arrays, Matrizen & Dictionaries

Arrays

Ein Array ist eine geordnete Liste mit einem Startindex von 0 bis zur Anzahl der Elemente in einem Array -1. Hier ein Beispiels für ein Array aus Strings:

let bikeNames : [String] = ["Stumpjumper Evo", "Santa Cruz Nomad", "Yeti SB6"]

Hinweis - Arrays

Alle Variablen eines Arrays müssen vom selben Typ sein!

Matrix / 2D Arrays

Matrizen eignen sich neben der Berechnung von linearen Aufgaben vor allem für die Entwicklung von Tile-Based oder Iso Games. Die Anordnung der Kacheln kann in 2 Dimensionalen Arrays in Reihen und Spalten ausgedrückt werden.

var gameBoard = [[1,2,3,4],
                 [5,6,7,8],
                 [9,10,11,12]]

Erstellen von leeren 2d Arrays:

var isoBoard : [[Int]] = []                 // a blank 2d array
var theSameIsoBoaard = Array<Array<Int>>()  // same array

Dictionaries

Eine besser lesbare Alternative zu Arrays bildet das Dictionary. key : value Paare bilden die Grundlage für die Erstellung. Ein Dictionary speichert ebenfalls nur Werte des selben Typs die im Gegensatz zu Arrays nicht sortiert sind. Zusätzlich zum Wert eines Elements wird ein „Key“ gespeichert über den auf den Wert zugegriffen werden kann. In anderen Programmiersprachen werden sie auch assoziative Arrays genannt.

var gameMessages: [String : String] = 
     ["win" : "you win!", "lost" : "you lose!", "indifferent" : "repeat!"]
var sameMessages: Dictionary<String, String> = 
     ["win" : "you win!", "lost" : "you lose!", "indifferent" : "repeat!"]

print(gameMessages["win"]) // you win!

Optionals

Die Einführung von „Optionals“, Variablen oder Konstanten die einen Wert enthalten können aber nicht müssen („nil“ – not in list), ist eventuell etwas gewöhnungsbedürftig und kann am Anfang etwas verwirrend sein. Nichts desto trotz müssen wir uns mit dem Thema genauer Beschäftigen, da viele Klassen die wir verwenden, z.B. Cocoa Touch Klassen, optionale Werte („Optionals“) zurückliefern. Ich sehe es als Vorteil, dass Apple die Entwickler zwingt auf fehlerhafte Eingaben etc. sofort, im Code, zu reagieren, das führt auf jeden Fall zu stabilerem Code.

In Swift ist es nicht erlaubt „leere“ oder noch nicht deklarierte Klassen-Objekte zu erstellen, wie du es vielleicht aus anderen Programmiersprachen kennst:

var gameState: String      // error

oder

var gameState: String = "BonusLevel"
var gameState = nil       // error

Wenn du ein Objekt ohne Referenz in Swift benötigst musst du Optionals verwenden, welche optional einen Wert oder „nil“ enhalten können. Die kurze Zauberformel für die Deklarierung eines „Optionals“ ist ein Fragezeichen „?“ nach dem Datentyp.

var gameState: String?

Unwrapping Optionals

Oft möchte man Variablen auch weiterverarbeiten, Berechnungen durchführen oder Zeichenketten zusammenführen etc.

var gameHintMessage:String? = "Go straight forward"
let textHint = "Play hint:"
let gameMessage = textHint + gameHintMessage  //error

Xcode liefert uns bei diesem Beispiel einen Compiler Fehler da die Variable gameHintMessage ein Optional ist. Wenn wir uns mal den dynamicType von gameHintMessage ausgeben lassen sehen wir auch gleich warum:

print(gameHintMessage.dynamicType) //Optional<String>

Um mit dem Wert von gameHintMessage arbeiten zu können müssen wir den Optional auspacken.

var gameHintMessage:String? = "Go straight forward"
let textHint = "Play hint:"
let gameMessage = textHint + gameHintMessage! // unwrapp gameHintMessage with "!"

Implicit Unwrapping

Swift bietet die Möglichkeit das Auspacken von Optionals direkt bei der Deklaration zu erzwingen, wenn man sich z.B.: sehr sicher ist das eine Variable einen Wert enthält. Das passiert in Xcode automatisch wenn man Outlets oder Actions über das Storyboard verknüpft:

@IBOutlet weak var toggleCamera: UISwitch!
@IBOutlet weak var displayImageView: UIImageView!
var onwUnwrappedOptional: String!

Optional Binding

Das optional binding ist eine elegantere Art mit optionalen Werten zu verfahren. Indem ein optionaler Wert an eine Konstante übergeben wird überprüft ob der Wert nil ist:

var gameHintMessage:String? = "Go straight forward"
let textHint = "Play hint:"        
if let currentGameMessage = gameHintMessage {
       let gameMessage = textHint + currentGameMessage
}

Mit if let erstellen wir eine Konstante mit dem Namen currentGameMessage und binden diese direct an den Optional gameHintMessage. Gleichzeitig wird überprüft ob gameHintMessage nil ist oder einen Wert enthält. Falls gameHintMessage nicht nil ist, ist der Ausdruck true und der Codeblock wird ausgeführt.

Hinweis

Beachte das wir kein wrapping („?“)  und auch kein implicites unwrapping(„!“) anwenden müssen.

Tuples

Mit Tuples haben wir die Möglichkeit einer Funktion mehrere Werte zurückgeben zu lassen:

func getPoints (hits:Int) -> (healthPoints: String, strengthPoints: String) {
    var healthPoints = hits * 2
    var strengthPoints = hits * 3
    return (healthPoints, strengthPoints)
}

let resultPoints = getPoints(13)
print("Lebenspunkte: \(resultPoints.healthPoints) Stärke: \(resultPoints.strengthPoints)")
vorheriger Beitrag

Joy of Use (Nutzungsfreude)

nächster Beitrag

Swift 101 - Infografik

Der Schreiberling

Markus M.

Markus M.

In den letzten 15 Jahren als Consultant und Coach für namhafte internationale Kunden und Agenturen (z.B.: IGT, Red Bull, adidas, OMV, PEZ, Volksoper Wien, Jung von Matt, spreadshirt, Philotech, Wien IT, bet-at-home, Siemens, SAE Institut, draft fcb, seso, looom, bacardi, lindt, uvm.) hat sich eine Menge Wissen angesammelt welches ich hier in diesem Blog gerne mit euch teilen möchte.

Keine Meinung

schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.