
Hallo habrozhiteli! Schnelle Sprache ist jung, sie wächst, entwickelt und verändert sich, obwohl die grundlegenden Ansätze für Programmierung und Entwicklung bereits formuliert wurden. In der neuen, fünften Ausgabe des Buches wurde der erste Teil des Buches vollständig überarbeitet, wodurch die Kenntnis der Swift-Sprache angenehmer wird, und der gesamte Text wird gemäß den Funktionen von Swift 5 aktualisiert. Während einer langen und fruchtbaren Kommunikation mit den Lesern entstanden viele Ideen, dank derer die neue Ausgabe entstand noch nützlicheres und reichhaltigeres Lehrmaterial. Jetzt lernen Sie nicht nur Swift kennen, sondern erhalten auch erste Informationen zu den Prinzipien der Entwicklung vollwertiger Anwendungen. Die Welt von Swift verändert sich ständig. Menschen mit einem bedeutenden Wissens- und Erfahrungsschatz existieren aufgrund des Alters der Sprache noch nicht, sodass Sie einer der ersten Spezialisten werden können.
Auszug. Kapitel 6. Tupel
Möglicherweise sind Sie bei der Programmierung noch nie auf ein solches Konzept wie Tupel gestoßen. Dies ist jedoch eine der sehr nützlichen Funktionen, die in Swift verfügbar sind. Tupel können beispielsweise zum Arbeiten mit Koordinaten verwendet werden. Stimmen Sie zu, es ist viel bequemer, eine in eine Variable geschriebene Konstruktion (x, y, z) zu verwenden, als für jede Koordinatenachse eine separate Variable zu erstellen.
6.1. Tupel-Grundlagen
Ein Tupel ist ein Objekt, das Werte verschiedener Typen in einem einzigen zusammengesetzten Wert gruppiert.
Tupel sind der einfachste Weg, wie Swift Werte beliebiger Typen kombinieren kann. Jeder einzelne Wert im Tupel kann einen eigenen Datentyp haben, der in keiner Weise von anderen abhängt.
Wagenkolonne wörtlich
Mit dem Tupelliteral kann ein Tupel erstellt werden.
Syntaxis
(_1, _2, ..., _N)
• value: Any - der nächste Wert eines beliebigen Datentyps, der im Tupel enthalten ist.
Das Tupelliteral gibt den darin definierten Wert als Tupel zurück. Ein Literal ist von Klammern umgeben und besteht aus einer Reihe unabhängiger Werte, die durch Kommas getrennt sind. Die Anzahl der Elemente kann beliebig sein, es wird jedoch nicht empfohlen, mehr als sieben zu verwenden.
HINWEIS
Weiter entlang des Textes wird es eine große Anzahl von Syntaxblöcken geben. Sie beschreiben, wie die fraglichen Konstruktionen in realen Programmen verwendet werden können. Bevor Sie mit diesen Blöcken fortfahren, müssen Sie die Struktur dieses Blocks sowie die verwendeten Elemente beschreiben.
Die erste Zeile bestimmt immer direkt die Syntax selbst, die die Verwendung des Konstrukts im Programmcode beschreibt. In diesem Fall können bedingte Elemente verwendet werden (z. B. value_1, value_2 und value_N in der obigen Syntax). Normalerweise werden sie in Form von Text geschrieben, um ihren Zweck zu verstehen.
Detaillierte Beschreibungen der bedingten Elemente können folgen. In einigen Fällen können Elemente gruppiert werden (wie in der obigen Syntax, in der anstelle der Elemente value_1, value_2 usw. ein Elementwert beschrieben wird, dessen Anforderungen für alle Elemente mit einem bestimmten Namen gelten).
Nach dem Namen des bedingten Elements kann dessen Datentyp angegeben werden. Wenn ein bestimmter Wert eines bestimmten Typs (z. B. Zeichenfolge, numerisch, logisch usw.) als Element verwendet werden soll, wird der Typ durch einen Doppelpunkt (:) getrennt. Wenn jedoch ein Ausdruck als Element verwendet werden kann (z. B. a + b oder r> 100), wird der Typ nach dem Strich und der rechtwinkligen Klammer angezeigt, die den Pfeil darstellen (->). Es kann als ein (z. B. Int) und viele Datentypen (z. B. Int, String) definiert werden.
Die obige Syntax verwendet Any als Zeiger auf einen Datentyp. Any steht für einen beliebigen Datentyp. Während des Lernens werden Sie auf immer mehr Typen stoßen, die in diesem Syntaxblock angegeben werden können.
Eine detaillierte Beschreibung der Syntax sowie ein Beispiel für ihre Verwendung können folgen.
Ich empfehle Ihnen, diese Seite bei Bedarf mit einem Lesezeichen zu versehen
Komm immer wieder hierher.
Ein Tupel wird in Variablen und Konstanten genauso gespeichert wie Werte grundlegender Datentypen.
Syntaxis
let = (_1, _2, ..., _N) var = (_1, _2, ..., _N)
Deklarieren einer Variablen und einer Konstanten und Initialisieren mit einem Tupelliteral aus N Elementen als Wert. Um ein Tupel in eine Variable zu schreiben, mĂĽssen Sie die Anweisung var verwenden, und um in eine Konstante zu schreiben, mĂĽssen Sie die Anweisung let verwenden.
Betrachten Sie das folgende Beispiel. Wir deklarieren eine Konstante und initialisieren sie mit einem Tupel, das aus drei Typelementen besteht: Int, String und Bool (Listing 6.1).
Listing 6.1
let myProgramStatus = (200, "In Work", true) myProgramStatus
In diesem Beispiel ist myProgramStatus eine Konstante, die ein Tupel als Wert enthält, das den Status eines bestimmten Programms beschreibt und aus drei Elementen besteht:
- 200 - Ganzzahl vom Typ Int, Programmstatuscode;
- "In Arbeit" - ein String-Literal vom Typ String, eine Textbeschreibung des Programmstatus;
- true - ein logischer Wert vom Typ Bool, der die Möglichkeit bietet, den Betrieb des Programms fortzusetzen.
Dieses Tupel gruppiert die Werte von drei verschiedenen Datentypen in einer einzigen initialisierten Konstante.
Tupel-Datentyp
Wenn ein Tupel jedoch die Werte verschiedener Datentypen zu einem gruppiert, wie lautet dann der Datentyp des Tupels selbst und der Parameter, der seinen Wert speichert?
Ein Tupeldatentyp ist eine feste, geordnete Folge von Datentypnamen fĂĽr Tupelelemente.
Syntaxis
(____1, ____2, ..., ____N)
Der Datentyp ist in Klammern eingeschlossen, und die Namen der Elementtypen werden durch Kommas getrennt. Die Reihenfolge der Typnamen muss unbedingt der Reihenfolge der Elemente im Tupel entsprechen.
Beispiel
(Int, Int, Double)
Der Datentyp des myProgramStatus-Tupels aus Listing 6.1 lautet (Int, String, Bool). Der Datentyp wird implizit festgelegt, da er automatisch anhand der Elemente des Tupels ermittelt wird. Da die Reihenfolge der Angabe von Datentypen der Reihenfolge der Elemente im Tupel entsprechen muss, unterscheidet sich der Typ (Bool, String, Int) von (Int, String, Bool).
Listing 6.2 vergleicht die Datentypen der verschiedenen Tupel.
Listing 6.2
var tuple1 = (200, "In Work", true) var tuple2 = (true, "On Work", 200) print( type(of:tuple1) == type(of:tuple2) )
Konsole
false
Um die Datentypen von Tupeln zu vergleichen, werden die vom globalen Funktionstyp (von :) zurĂĽckgegebenen Werte verwendet, der den Typ des an ihn ĂĽbergebenen Objekts bestimmt.
Angenommen, im myProgramStatus-Tupel sollte das erste Element ein Float-Wert anstelle einer Ganzzahl sein. In diesem Fall können Sie den Datentyp des Tupels (ein Doppelpunkt nach dem Parameternamen) explizit bestimmen (Listing 6.3).
Listing 6.3
Sie sind nicht auf eine bestimmte Anzahl von Tupelelementen beschränkt. Ein Tupel kann so viele Elemente wie nötig enthalten (denken Sie jedoch daran, dass nicht empfohlen wird, mehr als sieben Elemente zu verwenden). Listing 6.4 zeigt ein Beispiel für die Erstellung eines Tupels aus vier Elementen desselben Typs. Es wird ein Alias ​​vom Datentyp Int verwendet, der nicht verboten ist.
Listing 6.4
6.2. Interaktion mit Tupelelementen
Ein Tupel dient nicht nur zum Festlegen und Speichern eines bestimmten Wertesatzes, sondern auch zur Interaktion mit diesen Werten. In diesem Abschnitt wird erläutert, wie Sie mit den Werten der Tupelelemente interagieren.
Initialisierung von Werten zu Parametern
Sie können neue Parameter mit einem Ausdruck deklarieren und die Werte aller Elemente des Tupels in ihnen initialisieren. Dazu müssen Sie nach dem Schlüsselwort var (oder let, wenn Sie Konstanten deklarieren) in Klammern und einem Komma die Namen der neuen Parameter angeben und nach dem Initialisierungsoperator das Tupel übergeben. Beachten Sie, dass die Anzahl der deklarierten Parameter mit der Anzahl der Tupelelemente übereinstimmen muss (Listing 6.5).
Listing 6.5
Konsole:
— 200 — In Work — true
Mit dieser Syntax können Sie beliebige Werte problemlos mit mehreren Parametern gleichzeitig initialisieren. Dazu muss auf der rechten Seite des Ausdrucks nach dem Initialisierungsoperator nicht der Parameter übergeben werden, der das Tupel enthält, sondern das Tupelliteral (Listing 6.6).
Listing 6.6
var (myName, myAge) = ("", 140)
Konsole:
, 140
Die Variablen myName und myAge werden mit den entsprechenden Werten der Tupelelemente initialisiert (Troll, 140). Mit dieser Syntax können Sie beliebige Tupelelemente ignorieren. Dazu müssen Sie den Unterstrich als Namen der Variablen angeben, die dem zu ignorierenden Element entspricht (Listing 6.7).
Listing 6.7
var (statusCode, _, _) = myProgramStatus
Infolgedessen wird der Wert des ersten Elements des Tupels, myProgramStatus, in die Variable statusCode geschrieben. Andere Werte werden ignoriert.
HINWEIS
Der Unterstrich in Swift zeigt an, dass der Parameter ignoriert wird. Dies ist nicht das einzige Beispiel, in dem es verwendet werden kann. Wenn Sie in Zukunft das Material des Buches studieren, werden Sie ihn mehr als einmal treffen.
Greifen Sie ĂĽber Indizes auf Tupelelemente zu
Jedes Element des Tupels enthält zusätzlich zum Wert einen ganzzahligen Index, mit dem auf dieses Element zugegriffen werden kann. Die Indizes sind immer in der Reihenfolge beginnend bei Null angeordnet. Somit ist in einem Tupel von N Elementen der Index des ersten Elements 0, und auf den letzten kann unter Verwendung des Index N-1 zugegriffen werden.
Beim Zugriff auf ein einzelnes Element wird der Index durch den Punkt nach dem Namen des Parameters angezeigt, in dem das Tupel gespeichert ist. Listing 6.8 zeigt ein Beispiel fĂĽr den Zugriff auf die einzelnen Elemente eines Tupels.
Listing 6.8
Konsole:
— 200 — In Work — true
Greifen Sie ĂĽber Namen auf Tupelelemente zu
Zusätzlich zum Index kann jedem Element des Tupels ein eindeutiger Name zugewiesen werden. Elementnamen sind nicht erforderlich und werden nur zur bequemen Verwendung von Tupeln verwendet. Namen können sowohl jedem als auch Teilen von Elementen gegeben werden. Der Elementname kann sowohl im Tupelliteral als auch durch explizite Definition seines Typs definiert werden.
Listing 6.9 zeigt ein Beispiel fĂĽr die Ermittlung der Namen von Tupelelementen durch ein Literal.
Listing 6.9
let statusTuple = (statusCode: 200, statusText: "In Work", statusConnect: true)
Die angegebenen Elementnamen können verwendet werden, um die Werte dieser Elemente zu erhalten. In diesem Fall wird dieselbe Syntax verwendet wie beim Zugriff über Indizes, wenn der Index über den Punkt nach dem Parameternamen angegeben wurde. Das Definieren von Namen hindert Sie nicht daran, Indizes zu verwenden. Indizes in einem Tupel können immer verwendet werden.
Listing 6.10 zeigt, wie Elementnamen in Verbindung mit Indizes verwendet werden.
Listing 6.10
Konsole:
— 200 — In Work — true
Der Zugriff auf Elemente mithilfe von Namen ist bequemer und visueller als der Zugriff ĂĽber Indizes.
Wie bereits erwähnt, können Elementnamen nicht nur im Tupelliteral angegeben werden, sondern auch bei der expliziten Bestimmung des Datentyps. Listing 6.11 zeigt das entsprechende Beispiel.
Listing 6.11
let anotherStatusTuple: (statusCode: Int, statusText: String, statusConnect: Bool) = (200, "In Work", true)
Tupelbearbeitung
FĂĽr Tupel des gleichen Typs kann die Operation zum Initialisieren des Werts eines Tupels in ein anderes ausgefĂĽhrt werden. Betrachten Sie das Beispiel in Listing 6.12.
Listing 6.12
var myFirstTuple: (Int, String) = (0, "0") var mySecondTuple = (100, "")
Die Tupel myFirstTuple und mySecondTuple haben denselben Datentyp, sodass der Wert von einem in einen anderen initialisiert werden kann. Der erste Typ wird explizit festgelegt, der zweite durch den initialisierten Wert.
Indizes und Namen können verwendet werden, um die Werte einzelner Elemente in einem Tupel zu ändern (Listing 6.13).
Listing 6.13
Tupel sind in Swift sehr verbreitet. Mit ihrer Hilfe können Sie beispielsweise problemlos nicht nur einen, sondern mehrere Werte aus Ihrer Funktion zurückgeben (wir werden uns später mit den Funktionen vertraut machen).
HINWEIS
Tupel erlauben nicht die Erstellung komplexer Datenstrukturen. Sie dienen lediglich dazu, einen bestimmten Satz heterogener oder ähnlicher Parameter zu gruppieren und an den gewünschten Ort zu übertragen. Um komplexe Strukturen zu erstellen, müssen Sie die Werkzeuge der objektorientierten Programmierung (OOP) und insbesondere Klassen oder Strukturen verwenden. Wir werden sie später kennenlernen.
»Weitere Informationen zum Buch finden Sie auf
der Website des Herausgebers»
Inhalt»
Auszug25% Rabatt auf Gutschein fĂĽr Swabbrookers -
SwiftNach Bezahlung der Papierversion des Buches wird ein elektronisches Buch per E-Mail verschickt.