Chris Codeblog

Tipps, Tricks & Tutorials rund ums Programmieren

[Swift]: Einführung Teil 2 – Arrays, Dictionaries, Schleifen und ein paar Standardfunktionen

Im ersten Teil habe ich mich um die Datentypen und sonstige Kleinigkeiten gekümmert. Heute geht es um Arrays, Dictionaries, Schleifen und ein paar in Swift vorhandene Funktionen.

Schleifen

Für Schleifen mit einer festen Anzahl von durchläufen gibt es zwei Operatoren:

Den closed range operator:

// Laueft von 1 - 5
for index in 1...5 {
    println(index)
}

Den half closed range operator:

// Lauft von 1 - 4
for index in 1..5 {
    println(index)
}

Natürlich gibt es auch die „klassische“ for-Schleife:

for var index = 1; index < 5; ++index {
    println(index)
}

Natürlich gibt es auch eine Kopfgesteuerte while-Schleife:

var index = 1;
while index < 5 {
    println(index++)
}

Und eine Fußgesteuerte while-Schleife:

var index = 1;
do {
    println(index++)
} while index < 5

Wie nicht anders zu erwarten gibt es außerdem eine for-in-Schleife, welche ich im Zusammenhang mit Arrays erklären werde.

Möchte man eine Schleife durchlaufen, benötigt aber den entsprechenden Wert des iterators nicht verwendet man einfach „_“:

for _ in 1...10 {
    println("Servus")
}
Arrays

Arrays werden ganz einfach definiert:

// Ein leeres String-Array erzeugen
var mobiles: Array<String> = String[]()
// Ein String Array mit Eintraegen initialisieren
var myMobiles: Array<String> = ["Nokia N9", "Apple iPhone"]

Sieht ziemlich lang aus? Stimmt! Es geht natürlich auch kürzer:

var myMobiles: String[] = ["Nokia N9", "Apple iPhone"]

Da Swift die Datentypen wie wir ja schon wissen selbst ermitteln kann, geht das erstellen eines Arrays natürlich noch kürzer:

var myMobiles = ["Nokia N9", "Apple iPhone"]

Wie gesagt gehe ich noch kurz auf die for-in-Schleife ein. Damit kann leicht durch die einzelnen Einträge eines Arrays iteriert werden:

// Laueft die Eintraege in myMobiles durch, speichert jeden Eintrag in mobile und gibt den Wert dan anschliessend aus
for mobile in myMobiles {
    println(mobile)
}

Arrays usw. sind Swift starten alle bei 0 (wie in den meisten Sprachen). Werte in Swift aus einem Array kann man ganz normal mit myMobiles[0] auslesen bzw. ändern. Allerdings können auch mehrere Werte auf einmal geändert werden:

// Den ersten Wert aus myMobiles holen
var firstMobile = myMobiles[0]
// Den ersten Wert in myMobiles anpassen
myMobiles[0] = "Nokia N97"
// Mehrere Werte im Array anpassen
myMobiles[0..1] = ["HTC Desire", "HTC One"]

Mit insert kann an einer bestimmten Stelle ein Wert eingefügt werden. Mit removeAtIndex bzw. removeLast können Werte entfernt werden. Diese beiden Funktionen liefern im übrigen auch den entfernten Wert zurück. Wird dieser nicht gebraucht, kann man den Rückgabewert einfach ignorieren:

// Einen Wert an einer bestimmten Stelle einfuegen
myMobiles.insert("Nokia N73", atIndex: 0)
// Den Wert an Index "1" entfernen und den zurückgegebenen Wert merken
let secondMobile = myMobiles.removeAtIndex(1)
// Den letzten Wert aus dem Array entfernen und den rueckgabewert ignorieren
myMobiles.removeLast()

Sollen ganz schnell alle Einträge aus dem Array entfernt werden, genügt ein „zuweisen“ von eckigen Klammern ohne Inhalt:

// Loescht alle Eintraege aus dem Array
myMobiles = []

Möchte man ein Array mit mehreren gleichen Werten initialisieren, kann man repeated-Values verwenden:

// Ein Array mit 5 gleichen Werten initialiseren (mit Typ-Angabe)
var doubleArray = Double[](count: 5, repeatedValue: 0.0)
// Ein Array mit 5 gleichen Werten initialisieren (ohne Typ-Angabe)
var secondDoubleArray = Array(count: 5, repeatedValue: 0.0)

Außerdem können mehrere Arrays zu einem neuen Array addiert werden:

// Ein neues Array mit 10 Eintraegen
var thirdDoubleArray = doubleArray + secondDoubleArray
Dictionaries

Ebenso wie Arrays können Dictionaries ganz einfach deklariert werden:

// Vollstaendige Deklaration eines Dictionaries
var mobiles: Dictionary<Int, String> = [1: "Nokia N9", 2: "iPhone 5S"]
// Schnelle Deklaration eines Dictionaries
var myMobiles = [1: "Nokia N9", 2: "iPhone 5S"]

Durch die Angabe des Schlüssels kann ein Wert aus einem Dictionary ausgelesen werden. Durch Angabe eines neuen Schlüssels kann ein Wert hinzugefügt werden, falls ein bereits vorhandener Schlüssel angegeben wird wird der Wert ersetzt. Das gleiche erreicht man mit der Funktion updateValue, bei Verwendung der Funktion wird allerdings ein optionaler-Datentyp zurückgegeben, dieser enthält den alten Wert (falls ein entsprechender Schlüssel vorhanden war) oder nil falls kein Schlüssel vorhanden war:

// Einen Wert anhand des Schluessels auslesen
var first = myMobiles[1]
// Einen Wert updaten bzw. einfuegen
myMobiles[3] = "HTC One"
// Einen Wert updaten bzw. einfuegen und einen evtl. schon vorhanden Wert als Rueckgabe erhalten
var second = myMobiles.updateValue("Nokia N97", forKey: 2)

if let oldMobile = myMobiles.updateValue("Nokia N73", forKey: 5) {
    println("Altes Handy: \(oldMobile)")
} else {
    println("Kein altes Handy gefunden!")
}

Gleiches gilt für das entfernen eines Wertes aus dem Dictionary:

// Entfernt einen Wert
myMobiles[2] = nil
// Entfernt einen Wert und gibt diesen (falls vorhanden) zurueck
let oldMobile2 = myMobiles.removeValueForKey(3)

Um alle Werte aus einem Dictionary zu entfernen verwendet man [:]:

// Alle Werte aus einem Dictionary entfernen
myMobiles = [:]

Zum Schluss noch eine Anmerkung zu konstanten Dictionaries und Arrays:
Bei konstanten Dictionaries kann nichts geändert werden. Es kann also weder die länge verändert werden (entfernen, hinzufügen), noch können Werte verändert werden.

Bei konstanten Arrays kann zwar die länge des Arrays nicht verändert werden, allerdings kann der Wert an einem bestimmten Index verändert werden.

[Swift]: Einführung Teil 2 – Arrays, Dictionaries, Schleifen und ein paar Standardfunktionen

Schreibe einen Kommentar

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

Nach oben scrollen