Arrays erlauben es viele Werte in einer einzigen Collection zu gruppieren. Anschließend ist es möglich über ihre Position in dieser Collection wieder auf sie zu zugreifen. Swift leitet den Datentyp der Elemente in einem Array automatisch ab, so wie hier:
var evenNumbers = [2, 4, 6, 8]
var songs = ["Shake it Off", "You Belong with Me", "Back to December"]
Wie du siehst verwendet Swift eckige Klammern um den Start und das Ende eines Arrays zu kennzeichnen und die einzelnen Elemente werden durch Kommas getrennt.
Möchtest du die Elemente eines Arrays auslesen, musst du eines beachten: Swift fängt bei 0 an zu zählen. Das erste Element ist 0, das Zweite ist 1, das Dritte ist 2 usw. Versuche dies in deinem Playground:
var songs = ["Shake it Off", "You Belong with Me", "Back to December"]
songs[0]
songs[1]
songs[2]
Du solltest "Shake it Off", "You Belong with Me" und "Back to December" im Ergebnisbereich angezeigt sehen.
Die Position eines Elements in einem Array wird Index genannt und du kannst alle Elemente über ihren Index auslesen. Allerdings sei vorsichtig: Dein Array hat drei Elemente, d.h. sie haben die Indizes 0, 1 und 2. Wenn du aber versuchst songs[3]
zu lesen wird dein Playground nicht mehr funktionieren. In einer App würde dies bedeuten, dass sie abstürzt!
Da du ein Array mit Strings erstellt hast weiß Swift nun, dass der Datentyp "Array aus Strings" ist. Um dies zu überprüfen, kannst du einen Befehl im Playground verwenden um dir den Datentyp einer Variable anzeigen zu lassen. Das geht so:
var songs = ["Shake it Off", "You Belong with Me", "Back to December"]
type(of: songs)
Es wird Array<String>.Type
im Ergebnisbereich ausgegeben und bestätigt, dass Swift songs korrekterweise als ein Array aus Strings betrachtet.
Nehmne wir nun an du machst einen Fehler und fügst aus Versehen eine Zahl am Ende des Arrays hinzu. Versuche dies in deinem Playground:
var songs = ["Shake it Off", "You Belong with Me", "Back to December", 3]
type(of: songs)
Du wirst einen Fehler angezeigt bekommen. Das Problem ist allerdings nicht, dass Swift nicht mit Arrays aus verschiedenen Datentypen umgehen kann - das werde ich dir später noch zeigen - sondern, dass es versucht dir zu helfen. Die Fehlermeldung ist: "heterogenous collection literal could only be inferred to '[Any]'; add explicit type annotation if this is intentional." Auf Deutsch heißt dies so viel wie: "Es sieht so aus als soll dieses Array verschiedene Datentypen beinhalten. Wenn du das wirklich willst, dann gib es explizit an".
Typensicherheit ist wichtig und obwohl es nett ist, dass Swift Arrays mit beliebigen Datentypen erstellen kann, war es in diesem Fall ein Fehler. Zum Glück habe ich dir bereits gezeigt, dass du Typannotationen verwenden kannst, um anzugeben welche Art von Daten du in dem Array speichern möchtest. Um den Typ eines Array zu bestimmen, schreibe den Datentyp zwischen eckige Klammern:
var songs: [String] = ["Shake it Off", "You Belong with Me", "Back to December", 3]
Wir haben Swift nun gezeigt, dass wir nur Strings in dem Array speichern wollen, wird es sich weigern den Code auszuführen, denn 3 ist kein String.
Wenn du wirklich alle Arten von Daten in einem Array speichern willst, benutze den Any
type:
var songs: [Any] = ["Shake it Off", "You Belong with Me", "Back to December", 3]
Wenn du ein Array mit der oben beschriebenen Syntax erstellen möchtest, dann erstellt Swift das Array und füllt es mit den angegebenen Werten. Es ist nicht ganz so einfach wenn du ein Array erstellen und später füllen willst. Diese Syntax funktioniert z.B. nicht:
var songs: [String]
songs[0] = "Shake it Off"
Der Grund dafür erscheint zunächst unnötig pedantisch, aber hat tiefe Auswirkungen auf die Performance, weswegen wir ihn akzeptieren müssen. Einfach ausgedrückt sagt var songs: [String]
Swift, dass die Variable songs
ein Array aus Strings beinhalten wird, aber es erstellt nicht das Array. Es alloziert keinen RAM oder führt irgendwelche anderen Schritte aus um ein Swift Array zu erstellen. Es besagt nur, dass es irgendwann ein Array geben wird und dass es Strings enthalten wird.
Es gibt zwei Wege dies korrekt auszudrücken und einer macht zu diesem Zeitpunkt vermutlich am meisten Sinn.
var songs: [String] = []
Hier wird wieder eine Typannotation verwendet um es klar zu machen, dass wir wir ein Array von Strings haben wollen. Zudem weist es der Variable ein leeres Array zu (das []
).
Außerdem wirst du häufig diese Version sehen:
var songs = [String]()
Dies bedeutet das Gleiche: das ()
sagt Swift, dass wir ein Array erstellen wollen was dann zu songs
zugewiesen wird. Diese Version ist zwei Zeichen kürzer, daher bevorzugen sie die meisten Programmierer.
Es gibt ein limitiertes Set von Operatoren, die du auf Arrays verwenden kannst. Zum Beispiel kannst du zwei Objekte vereinen:
var songs = ["Shake it Off", "You Belong with Me", "Love Story"]
var songs2 = ["Today was a Fairytale", "Welcome to New York", "Fifteen"]
var both = songs + songs2
Du kannst auch += verwenden um Elemente hinzuzufügen und zuzuweisen:
both += ["Everything has Changed"]
SPONSORED AppSweep by Guardsquare helps developers automate the mobile app security testing process with fast, free scans. By using AppSweep’s actionable recommendations, developers can improve the security posture of their apps in accordance with security standards like OWASP.
Sponsor Hacking with Swift and reach the world's largest Swift community!
Link copied to your pasteboard.