Arrays in Swift

Bei einem Array handelt es sich um eine Datenstruktur, die dazu dient, Elemente in einer geordneten Reihenfolge zu strukturieren. Wie die Datenstrukturen Dictionary und Set gehören sie zu den Collections (oder: Collection Types).

Ein Array lässt sich sehr einfach als array literal erstellen:

let partiesArray: Array = ["CDU", "SPD", "Grüne"]

Apples Dokumentation zu Swift beschreibt ein array literal übrigens folgendermaßen:

“An array literal is written as a list of values, separated by commas, surrounded by a pair of square brackets.”

In Swift ist es nicht erforderlich, den Datentyp anzugeben. Denn Swift ist in der Lage, diesen selbständig zu ermitteln, was als type inference bezeichnet wird; möglich wäre also auch:

let partiesArray = ["CDU", "SPD", "Grüne"]

Selbstverständlich können auch leere Arrays erzeugt werden. Nachfolgend einige Beispiele für die Datentypen String, Int, Double und CGPoint:

var myStringArray = [String]()
var myIntegerArray = [Int]()
var myDoubleArray = [Double]()
var myCGPointArray = [CGPoint]()

Ein Array durchlaufen

Bleiben wir aber beim partiesArray. Dieses Array könnte nun folgendermaßen mit einer for-Schleife (for loop) durchlaufen werden. Man bezeichnet dies auch als Iterieren (lat.: iterare , wiederholen):

for party in partiesArray {
    print(party)
}

Bei party handelt es sich um eine temporäre Variable, die nur während der Iteration besteht. Freilich hätte man anstelle von „party“ auch eine ganz andere Bezeichnung verwenden können.

Die Ausgabe in der Konsole würde wie folgt aussehen:

CDU
SPD
Grüne

Eine Iteration lässt sich außerdem auch mithilfe des Half-Open-Range-Operators ..< umsetzen:

for i in 0..<parties.count {
   let party = parties[i]
    // do something
}

Die Variable i ist hier eine Zahl, die von 0 bis zum letzten Index hoch zählt.

Elemente und Indizes

Jedes Element eines Arrays hat einen Index. Der Zugriff auf ein Element eines Arrays erfolgt durch die Angabe des Index in eckigen Klammern, z.B.

myArray[1]

Dabei ist aber zu beachten, dass das erste Element im Array den Index 0 hat.

Würde man also hier den Versuch unternehmen, mit

print(partiesArray[3])

das dritte Element („Grüne“) auszugeben, hätte dies folgende Fehlermeldung zur Folge:

fatal error: Index out of range

Denn beginnend mit dem Index 0, hat das letzte Element hier den Index 2.

array data structure

Richtig wäre also:

print(partiesArray[2]) // -> Grüne

Dabei wird der Ausdruck [2] als subscript bezeichnet.

Das letzte Element eines Arrays ließe sich übrigens auch folgendermaßen ausgeben:

let lastArrayItem = partiesArray.count - 1
print(partiesArray[lastArrayItem]) // -> Grüne

Dagegen wird mit

print(lastArrayItem) // -> 2

der Index des letzten Elements angezeigt.

Elemente entfernen und hinzufügen

Weniger demokratisch eingestellte Zeitgenossen, würden wohl gerne folgenden Code ausführen:

partiesArray.removeAll()

Wenn Ihr dies aber beispielsweise in einem Playground ausprobiert, erscheint folgende Fehlermeldung:

Arrays.playground:13:1: note: change 'let' to 'var' to make it mutable

Denn aufgrund der Deklaration mit let ist dieses Array nicht veränderbar (immutable). Damit ein Array veränderbar (mutable) ist, muss das Schlüsselwort var verwendet werden. Dann funktioniert auch die Methode removeAll().

Und nur wenn es veränderbar ist, können auch Elemente hinzugefügt werden. Machen wir also unser Array veränderbar und fügen weitere Parteien hinzu. Dafür wird die Methode append() verwendet, die per Punkt-Notation angefügt wird (wie zuvor auch bei removeAll).

var partiesArray = ["CDU", "SPD", "Grüne"]
partiesArray.append("Die Linke")
partiesArray.append("FDP")

Mit der Methode remove(at:) kann man den Index jenes Elements angeben, das entfernt werden soll. Die Zeile

partiesArray.remove(at: 0)
print(partiesArray) // -> ["SPD", "Grüne", "Die Linke", "FDP"]

führt also dazu, dass die Partei „CDU“ entfernt wird. Übrigens würde man mit der Methode removeFirst() zum gleichen Ergebnis gelangen. Dagegen lässt sich mit removeLast() das letzte Element entfernen.