Schnell von Grund auf Sammlungen und Tupel

Im vorigen Artikel haben Sie sich mit Variablen, Konstanten und einigen gängigen Datentypen wie Ganzzahlen, Gleitkommazahlen und Strings vertraut gemacht. In diesem Artikel werden Sammlungen näher betrachtet. Die Standardbibliothek von Swift definiert drei Auflistungstypen: Sets, Arrays und Wörterbücher. Beginnen wir mit Arrays.

1. Arrays

Wenn Sie mit Objective-C, JavaScript oder PHP vertraut sind, werden Arrays nicht schwer zu verstehen sein. Ein Array ist eine geordnete, null indizierte Wertesammlung. Es gibt jedoch einige wichtige Unterschiede zwischen Arrays für Swift und anderen Programmiersprachen.

Art

Der erste wichtige Unterschied zu Arrays in Objective-C besteht darin, dass die in einem Array gespeicherten Werte immer vom gleichen Typ sind. Auf den ersten Blick scheint dies eine erhebliche Einschränkung zu sein, ist es aber tatsächlich nicht. Tatsächlich hat diese Einschränkung einen wichtigen Vorteil. Wir wissen genau, welchen Typ wir zurückbekommen, wenn wir das Array nach einem seiner Werte fragen.

Ein weiterer wichtiger Unterschied ist die Art der Werte, die ein Array speichern kann. In Objective-C kann ein Array nur Werte eines Klassentyps speichern. Swift hat diese Einschränkung nicht. Ein Array in Swift kann Strings, Ganzzahlen, Floats und Klasseninstanzen speichern. Wie das funktioniert und warum dies in Swift möglich ist, wird später in dieser Serie deutlich, wenn wir Klassen und Strukturen behandeln.

Erklärung

Es gibt zwar mehrere Möglichkeiten, ein Array zu erstellen, Sie müssen jedoch bedenken, dass Swift wissen muss, welche Werte Sie im Array speichern möchten. Erstellen Sie einen neuen Spielplatz in Xcode wie im vorherigen Artikel, und fügen Sie Ihrem Spielplatz die folgenden Zeilen hinzu.

var array1: Array var array2: [String] var array3 = ["Apfel", "Birne", "Orange"]

Die erste und die zweite Zeile bedeuten dasselbe. Die zweite Zeile ist nur eine Abkürzung. Die eckigen Klammern umschließen die String Schlüsselwort sagen Sie Swift, dass wir ein Array deklarieren, das nur enthalten kann String Objekte.

Sie könnten die erste Codezeile folgendermaßen lesen: "Wir deklarieren eine Variable mit dem Namen array1 vom Typ Array das kann nur enthalten String Objekte. "Der Doppelpunkt bedeutet vom Typ.

Die dritte Zeile zeigt uns, wie Sie ein Array mit einem Arrayliteral initialisieren. Array-Literale sehen in Objective-C sehr ähnlich zu Array-Literalen aus. Der Hauptunterschied ist das Fehlen der @ Symbol vor den eckigen Klammern und den String-Literalen.

Es gibt auch eine fantastische Möglichkeit, ein Array mit einer vordefinierten Anzahl von Standardwerten zu initialisieren. Die Syntax mag anfangs verwirrend sein. Nehmen Sie sich jedoch einen Moment Zeit, um sie einzusinken.

var a = [String] (Wiederholung: "Test", Anzahl: 5)

Das resultierende Array enthält fünf Zeichenfolgen, wobei jede Zeichenfolge gleich ist "Prüfung". Um die oben genannte Initialisierung besser zu verstehen, werfen Sie einen Blick auf die folgenden zwei Codezeilen, in denen ein leeres Array von Strings initialisiert wird.

var b = Array() var c = [Zeichenfolge] ()

Mach dir keine Sorgen, wenn du immer noch verwirrt bist. Wir werden die Syntax genauer untersuchen, sobald wir uns mit Klassen und Funktionen befassen. In diesem Artikel konzentrieren wir uns nur auf Sammlungen.

Wandlungsfähigkeit

Ein Aspekt von Swift, den Sie schnell zu schätzen wissen, ist die Deklaration von veränderlichen Sammlungen. Das obige Codefragment deklariert beispielsweise drei veränderliche Arrays. Ein veränderbares Array wird mithilfe von definiert var Stichwort. So einfach ist das.

Wenn Sie nicht möchten, dass ein Array veränderbar ist, verwenden Sie die Lassen stattdessen ein Schlüsselwort. Swift zielt darauf ab, intuitiv und benutzerfreundlich zu sein, und die Umsetzung der Wandlungsfähigkeit ist ein perfektes Beispiel für dieses Ziel.

Werte abrufen und einstellen

Um auf die in einem Array gespeicherten Werte zuzugreifen, verwenden wir dieselbe Indexsyntax wie in Objective-C. Im folgenden Beispiel fragen wir array3 für das zweite Element die Zeichenfolge "Birne".

Array3 [1]

Den im Index gespeicherten Wert ersetzen 1 ist so einfach wie das Zuweisen eines neuen Wertes mit derselben Subskriptionssyntax. Im folgenden Beispiel ersetzen wir "Birne" bei index 1 mit "Pfirsich".

array3 [1] = "Pfirsich"

Dies ist nur möglich, weil das Array veränderbar ist, dh wir haben das verwendet var Schlüsselwort, um das Array zu deklarieren. Das Mutieren eines konstanten Arrays ist nicht möglich. Es gibt fortgeschrittenere Techniken zum Manipulieren des Inhalts eines Arrays, aber das zugrunde liegende Konzept ist das gleiche.

Das Zusammenführen von zwei Arrays ist so einfach wie das Zusammenfügen. Im folgenden Beispiel werden zwei unveränderliche Arrays deklariert und zusammengeführt. Beachten Sie, dass das resultierende Array, c, muss nicht veränderbar sein, damit dies funktioniert.

sei a = [1, 2, 3] sei b = [4, 5, 6] sei c = a + b

Es ist jedoch wichtig, dass die Werte in gespeichert werden ein und b sind vom gleichen Typ. Der Grund sollte jetzt offensichtlich sein. Wie bereits erwähnt, müssen die in einem Array gespeicherten Werte vom selben Typ sein. Das folgende Beispiel führt zu einem Fehler.

sei a = [1, 2, 3] sei b = [1.5, 5.2, 6.3] sei c = a + b

Um ein Array an ein veränderbares Array anzuhängen, verwenden wir die += Operator. Beachten Sie, dass der Operand rechts ein Array ist. Diese Operation würde nicht funktionieren, wenn wir die eckigen Klammern entfernen 4.

var a = [1, 2, 3] a + = [4]

Operationen

Arrays sind Objekte, an denen Sie eine Vielzahl von Operationen ausführen können. Arrays legen eine Reihe von Funktionen oder Methoden offen. Um eine Methode für ein Objekt aufzurufen, verwenden Sie die Punktnotation. Fügen Sie Ihrem Spielplatz die folgende Zeile hinzu, um einen Artikel hinzuzufügen array3.

array3.append ("Cherry")

Mal sehen, wie viele Artikel array3 enthält durch Überprüfung des Wertes von Anzahl Eigentum. Dies gibt aus 4 zum Ergebnisbereich.

array3.count

Es ist auch möglich, ein Element an einem bestimmten Index durch Aufrufen der Arrays einzufügen einfügen (_: at :) Methode wie unten gezeigt. Das einfügen (_: at :) Die Methode akzeptiert mehr als einen Parameter, und die Syntax sieht auf den ersten Blick etwas ungerade aus.

array3.insert ("Prune", um: 2)

Wie Objective-C unterstützt Swift benannte Parameter, um die Lesbarkeit zu verbessern. Das Ergebnis ist, dass Code einfacher zu lesen und zu verstehen ist und Funktionen oder Methoden nicht viel erklärt werden müssen. Es ist zum Beispiel klar, dass die einfügen (_: at :) Methode fügt ein Element an Index ein 2.

Swift ist zwar prägnanter und weniger ausführlich als Objective-C, jedoch werden benannte Parameter unterstützt. Wenn Sie von PHP, Ruby oder JavaScript kommen, ist dies sicherlich etwas gewöhnungsbedürftig.

Komfortmethoden

Was ich an Swift wirklich schätze, sind die Ruby-ähnlichen Komforteigenschaften und -methoden der Standard-Bibliothek von Swift. Ein Array hat beispielsweise eine ist leer Diese Eigenschaft gibt an, ob das Array Elemente enthält. Dies ist nichts weiter als eine Abkürzung für die Überprüfung der Arrays Anzahl Eigentum. Das Ergebnis ist jedoch Code, der übersichtlicher und leichter lesbar ist.

array3.isEmpty

2. Wörterbücher

Wörterbücher verhalten sich sehr ähnlich wie Wörterbücher in Objective-C. Ein Wörterbuch speichert eine ungeordnete Sammlung von Werten. Jeder Wert im Wörterbuch ist einem Schlüssel zugeordnet. Mit anderen Worten, ein Wörterbuch speichert eine Reihe von Schlüssel / Wert-Paaren.

Art

Wie bei Arrays müssen die in einem Wörterbuch gespeicherten Schlüssel und Werte vom selben Typ sein. Das heißt, wenn Sie ein Wörterbuch nach dem Wert eines bestimmten Schlüssels fragen, wissen Sie, welchen Typ das Wörterbuch zurückgibt.

Erklärung

Die Deklaration eines Wörterbuchs ähnelt der Deklaration eines Arrays. Der Unterschied besteht darin, dass Sie den Typ für Schlüssel und Werte angeben müssen. Das folgende Beispiel zeigt drei Möglichkeiten, ein Wörterbuch zu deklarieren.

var dictionary1: Wörterbuch var dictionary2: [String: Int] var dictionary3 = ["Apfel": 3, "Birne": 8, "Orange": 11]

Die zweite Zeile ist eine Abkürzung für die erste Zeile. Die Schlüssel dieser Wörterbücher müssen vom Typ sein String während erwartet wird, dass die Werte vom Typ sind Int. Das var Schlüsselwort zeigt an, dass die Wörterbücher veränderbar sind.

Sie könnten die erste Codezeile folgendermaßen lesen: "Wir deklarieren eine Variable mit dem Namen wörterbuch1 vom Typ Wörterbuch das kann nur Schlüssel des Typs enthalten String und Werte des Typs Int."

Die dritte Zeile zeigt, wie wir ein Wörterbuch mit einem Wörterbuchliteral initialisieren können. Dies ähnelt der in Objective-C verwendeten Syntax. Beachten Sie jedoch, dass die geschweiften Klammern durch eckige Klammern ersetzt werden und dem Literal kein vorangestelltes vorangestellt ist @ Symbol.

Werte abrufen und einstellen

Der Zugriff auf Werte ähnelt dem Zugriff auf Werte eines Arrays. Der einzige Unterschied besteht darin, dass Sie den Schlüssel anstelle des Index des Werts verwenden, auf den Sie zugreifen müssen. Das folgende Beispiel veranschaulicht dies.

let value = dictionary3 ["Apple"] print (value)

Sie werden feststellen, dass Xcode uns den Wert von angibt Wert ist nicht 3, aber Optional (3). Was bedeutet das? Swift verwendet Optionale, um Werte umzuwandeln, bei denen es sich um zwei Dinge handeln kann, einen Wert oder Null. Machen Sie sich an diesem Punkt keine Sorgen um Optionale. Wir werden uns im nächsten Artikel dieser Serie auf Optionale konzentrieren. Lassen Sie mich nur sagen, dass Optionale ein weiteres Schlüsselkonzept der Programmiersprache Swift sind.

Es ist interessant zu erwähnen, dass die Syntax für den Zugriff auf einen Wert eines Wörterbuchs mit der von Arrays identisch ist, wenn die Schlüssel des Wörterbuchs vom Typ sind Int. Schauen Sie sich das folgende Beispiel an, um zu sehen, was ich meine.

var dictionary4 = [0: "Apfel", 1: "Birne", 2: "Orange"] Frucht setzen = dictionary4 [0]

Operationen

Wie bei Arrays definiert die Swift-Standardbibliothek eine Vielzahl von Operationen, die Sie für Wörterbücher ausführen können. Sie können ein Wörterbuch nach seiner Anzahl von Schlüssel / Wert-Paaren durch dessen fragen Anzahl Eigentum. Das Entfernen eines Schlüssel / Wert-Paares ist einfach und intuitiv, wie das nächste Beispiel veranschaulicht. Dies ist natürlich nur möglich, wenn das Wörterbuch veränderbar ist.

dictionary4.removeValue (forKey: 0)

Wenn Sie Swift lernen, stoßen Sie möglicherweise auf Codeausschnitte, die seltsam oder verwirrend aussehen. Schauen Sie sich die folgende Zeile an, in der wir zuerst ein Wörterbuch deklarieren und dann dessen Schlüssel / Wert-Paare entfernen.

var dictionary = [String: Int] () dictionary ["Oranges"] = 2 dictionary ["Äpfel"] = 10 dictionary ["Pears"] = 5 dictionary = [:]

Man muss zugeben, dass die letzte Zeile etwas seltsam aussieht. Denn Swift kennt die Arten der Schlüssel und Werte, die gespeichert werden können Wörterbuch, Um das Wörterbuch zu leeren, müssen Sie ihm lediglich ein leeres Wörterbuch zuweisen.

In diesem Fall müssen Sie die Typen für die Schlüssel und Werte nicht angeben, da wir dies bereits getan haben, als wir das Wörterbuch in der ersten Zeile deklariert haben. Dies weist auf ein anderes wichtiges Detail hin, dh der Wertetyp, den Sie in Arrays und Wörterbüchern speichern können, kann nicht geändert werden, sobald die Sammlung deklariert ist.

3. Sets

Sets sind Arrays sehr ähnlich, da sie eine Sammlung von Werten desselben Typs speichern. Es gibt jedoch einige wichtige Unterschiede. Die in einem Satz gespeicherten Elemente sind ungeordnet, und jedes Element kann nur einmal in einem Satz angezeigt werden.

Erklärung

Die Arbeit mit Sets unterscheidet sich etwas von der Arbeit mit Arrays. Schauen Sie sich die nächsten Beispiele an, in denen wir drei Sätze deklarieren. Das Set 1 Variable ist vom Typ einstellen, ein Satz, der nur Werte des Typs enthalten kann String.

var set1: Set var set2 = Set() var set3: Set = ["Apfel", "Birne", "Orange"]

Das set2 Variable ist eine leere Menge, und wir verwenden ein Array-Literal im dritten Beispiel, um eine veränderliche Menge zu erstellen und zu füllen, die drei Werte enthält. Dank der Typinferenz von Swift können wir den Typ des Sets weglassen.

var set3: Set = ["Apfel", "Birne", "Orange"]

Sets bearbeiten

Das Arbeiten mit Sets ähnelt dem Arbeiten mit Arrays. Wir können nach der Anzahl der Elemente fragen, die in einem Set gespeichert sind, indem wir das Set untersuchen Anzahl Eigentum.

set3.count

Ein Element einfügen ist einfach. Da die Elemente eines Satzes nicht geordnet sind, müssen Sie den Ort des neuen Elements nicht angeben.

set3.insert ("Prune")

Dasselbe gilt für das Entfernen eines Elements aus einem Satz.

set3.remove ("Orange")

Sie können ein Set auch fragen, ob es ein bestimmtes Element enthält.

set3.contains ("Apple")

Arrays oder Sets

Ich bezeichne Sets oft als leichtgewichtige Versionen von Arrays. Wenn die Reihenfolge der Elemente nicht wichtig ist oder Sie sicherstellen möchten, dass jedes Element nur einmal in einer Auflistung angezeigt wird, sind Sets die beste Methode.

4. Tupel

Du wirst Tupel lieben. Tupel sind keine Sammlungen, aber wie Sammlungen fassen sie auch mehrere Werte zusammen. Ähnlich wie bei Arrays und Wörterbüchern können Tupel Werte eines beliebigen Typs enthalten. Der Hauptunterschied besteht jedoch darin, dass die in einem Tupel gespeicherten Werte nicht vom selben Typ sein müssen. Schauen wir uns ein Beispiel an, um dies näher zu erläutern.

import Foundation var currency = ("EUR", 0,81) var time = (Datum (), "Dies ist meine Nachricht.") var email = ("Bart Jacobs", "[email protected]")

Das erste Beispiel deklariert ein Tupel namens Währung das ist vom typ (String, Int). Das zweite Tupel, Zeit, enthält ein Datum Instanz und ein String-Literal. Die Werte sind in gespeichert Email sind beide vom Typ String, was bedeutet Email ist vom Typ (String, String).

Auf Werte zugreifen

Indizes

Um auf einen in einem Tupel gespeicherten Wert zuzugreifen, verwenden Sie den Index, der dem gewünschten Wert entspricht.

var rate = währung.1 var nachricht = zeit.1 var name = email.0

Xcode zeigt uns die Indizes aller Werte, die in einem Tupel im Ergebnisbereich des Spielplatzes rechts gespeichert sind.

Namen

Um die Lesbarkeit zu verbessern, können Sie die in einem Tupel gespeicherten Werte benennen. Das Ergebnis ist, dass Sie auf die Werte des Tupels statt über ihre Indizes auf deren Namen zugreifen können. Das Deklarieren eines Tupels ist in diesem Fall etwas anders.

var Currency = (Name: "EUR", Kurs: 0,81). Lassen Sie CurrencyName = Currency.Name. Lassen Sie CurrencyRate = Currency.Rate

Zersetzung

Es gibt eine zweite, elegantere Art, mit den in einem Tupel gespeicherten Werten zu arbeiten. Schauen Sie sich das folgende Beispiel an, in dem wir den Inhalt von zerlegen Währung.

let (Währungsname, Währungsrate) = Währung

Der Wert von Währung bei index 0 ist in gespeichert Währungsname, und den Wert am Index 1 ist in gespeichert Wechselkurs. Es ist nicht erforderlich, den Typ für anzugeben Währungsname und Wechselkurs da Swift den Typ von den in Währung. Mit anderen Worten, Währungsname ist vom Typ String, und Wechselkurs ist vom Typ Schweben.

Wenn Sie nur an bestimmten Werten eines Tupels interessiert sind, können Sie einen Unterstrich verwenden, um Swift mitzuteilen, an welchen Werten Sie nicht interessiert sind.

let (Währungsname, _) = Währung

Fazit

Arrays und Wörterbücher sind grundlegende Bestandteile fast jeder Programmiersprache, und Swift unterscheidet sich nicht. Während sich Sammlungen in Swift etwas anders verhalten, dauert es nicht lange, um mit den Kollektionstypen von Swift vertraut zu werden, wenn Sie mit Arrays und Wörterbüchern in anderen Programmiersprachen gearbeitet haben. Im nächsten Lernprogramm werden Optionen und Kontrollfluss untersucht.

Lerne schnell

Wir haben ein umfassendes Handbuch zusammengestellt, um Sie beim Erlernen von Swift zu unterstützen, egal ob Sie gerade mit den Grundlagen anfangen oder fortgeschrittenere Themen erkunden möchten.

Wenn Sie sich schnell mit der Sprache Swift vertraut machen möchten, lesen Sie unseren Kurs zum Erstellen von iOS-Apps mit Swift.

Oder sehen Sie sich einige unserer anderen Tutorials und Kurse zu Swift und iOS-Entwicklung an!