In den vorherigen Artikeln haben Sie einige grundlegende Konzepte der Programmiersprache Swift kennen gelernt. Wenn Sie schon einmal programmiert haben, haben Sie sicher einige Ähnlichkeiten mit anderen Programmiersprachen wie Ruby, JavaScript und Objective-C gesehen.
In diesem Artikel vergrößern wir den Kontrollfluss in Swift. Bevor wir den Steuerfluss genauer besprechen können, müssen wir uns ein Konzept anschauen, das für die meisten von Ihnen, die Optionale, neu ist. Optionals sind ein weiteres Sicherheitsmerkmal von Swift. Auf den ersten Blick mag die Verwendung von Optionals mühselig erscheinen, aber Sie werden schnell feststellen, dass Optionals Ihren Code wesentlich sicherer machen.
Wir haben bereits gesehen, dass eine Variable initialisiert werden muss, bevor sie verwendet werden kann. Sehen Sie sich das folgende Beispiel an, um zu verstehen, was dies bedeutet.
var str: String str.isEmpty
Wenn Sie es gewohnt sind, mit Strings in Objective-C zu arbeiten, werden Sie möglicherweise überrascht sein, dass Swift einen Fehler anzeigt. Mal sehen, was dieser Fehler uns sagt.
In vielen Sprachen haben Variablen einen anfänglichen Standardwert. In Objective-C ist beispielsweise die Zeichenfolge im folgenden Codeausschnitt gleich Null
.
NSString * newString;
Das Konzept von Null
unterscheidet sich in Swift und Objective-C. Wir werden besprechen Null
etwas später etwas ausführlicher.
Swift verwendet Optionale, um ein wichtiges Konzept einzukapseln, dh eine Variable oder Konstante hat einen Wert oder nicht. So einfach ist es in Swift. Um eine Variable oder Konstante als optional zu deklarieren, fügen wir dem Typ der Variablen oder Konstante ein Fragezeichen hinzu.
var str: String?
Die Variable str
ist nicht mehr vom Typ String
. Es ist jetzt vom Typ wahlweise String
. Dies ist wichtig zu verstehen. Das Ergebnis oder der Nebeneffekt ist, dass wir nicht mehr direkt mit dem Wert von interagieren können str
Variable. Der Wert wird sicher in der Option gespeichert, und wir müssen die Option nach dem eingekapselten Wert fragen.
Eine Möglichkeit, auf den Wert einer Option zuzugreifen, ist das erzwungene Auspacken. Wir können auf den Wert der Variablen zugreifen str
durch Anhängen eines !
auf den Namen der Variablen.
var str: String? str = "Test" drucken (str!)
Es ist wichtig, dass Sie sicher sind, dass das optionale Element einen Wert enthält, wenn Sie das Auspacken erzwingen. Wenn das optionale Element keinen Wert hat und Sie das Auspacken erzwingen, gibt Swift einen Fehler aus.
Es gibt eine sicherere Möglichkeit, auf den Wert eines optionalen Elements zuzugreifen. Wir schauen uns das genauer an ob
Anweisungen in wenigen Minuten, aber das folgende Beispiel zeigt, wie wir sicher auf den in der Variablen gespeicherten Wert zugreifen können str
, welche vom Typ optional ist String
.
var str: String? if str! = nil print (str!) else print ("str hat keinen Wert")
Wir prüfen zunächst, ob die Variable vorliegt str
entspricht Null
bevor wir den Inhalt drucken. In diesem Beispiel, str
hat keinen Wert, was bedeutet, dass er nicht versehentlich ausgepackt wird.
Es gibt einen eleganteren Ansatz, der als optionale Bindung bezeichnet wird. Im folgenden Beispiel weisen wir den im optionalen Wert gespeicherten Wert einer temporären Konstante zu, die im verwendet wird ob
Aussage. Der Wert des optionalen str
ist an die Konstante gebunden strConst
und in der verwendet ob
Aussage. Dieser Ansatz funktioniert auch für während
Aussagen.
var str: String? str = "Test", wenn strConst = str print (strConst) else print ("str hat keinen Wert")
Null
?Wenn Sie von Objective-C kommen, wissen Sie ganz bestimmt was Null
ist. In Ziel-C, Null
ist ein Zeiger auf ein Objekt, das nicht existiert. Schnell definiert Null
ein bisschen anders, und es ist wichtig, dass Sie den Unterschied verstehen.
In Swift, Null
bedeutet das Fehlen eines Wertes, irgendein Wert. Während Null
gilt nur für Objekte in Objective-C, in Swift Null
kann für jeden Typ verwendet werden. Es ist daher wichtig zu verstehen, dass ein optionales nicht gleichbedeutend mit ist Null
in Ziel-C. Diese Konzepte sind sehr unterschiedlich.
Swift bietet eine Reihe gebräuchlicher Konstrukte, um den Fluss des von Ihnen geschriebenen Codes zu steuern. Wenn Sie Erfahrung mit der Programmierung haben, haben Sie keine Probleme, sich mit den Kontrollflusskonstrukten von Swift vertraut zu machen ob
und Schalter
Aussagen und zum
und während
Schleifen.
Swift wäre jedoch nicht Swift, wenn sich sein Kontrollfluss nicht leicht von den Kontrollflusskonstrukten von Objective-C unterschied. Die Details sind zwar wichtig, aber ich bin mir sicher, dass sie Sie nicht daran hindern werden, mit Swift Schritt zu halten. Beginnen wir mit dem gebräuchlichsten bedingten Konstrukt, dem ob
Aussage.
ob
Swift's ob
Aussagen sind sehr ähnlich zu denen in Objective-C. Der Hauptunterschied besteht darin, dass die Bedingung nicht in Klammern eingeschlossen werden muss. Geschweifte Klammern sind jedoch obligatorisch. Letzteres verhindert, dass Entwickler häufige Fehler in Bezug auf das Schreiben einführen ob
Aussagen ohne geschweifte Klammern. Das ist was für ein ob
Aussage sieht aus wie in Swift.
sei a = 10, wenn a> 10 print ("Der Wert von" a "ist größer als 10.") else print ("Der Wert von" a "ist kleiner oder gleich 10.") )
Kein Wunder, dass Swift auch eine definiert sonst
Klausel. Der Code in der sonst
Klausel wird ausgeführt, wenn die Bedingung gleich ist falsch
. Es ist auch möglich, zu verketten ob
Anweisungen wie im nächsten Beispiel gezeigt.
sei a = 10, wenn a> 10 print ("Der Wert von" a "ist größer als 10")), andernfalls wenn a> 5 print ("Der Wert von" a "ist größer als 5) ") else print (" Der Wert von "a" ist kleiner als oder gleich 5. ")
Es gibt einen wichtigen Hinweis, den Zustand eines ob
Anweisung muss zurückkehren wahr
oder falsch
. Dies gilt nicht für ob
Anweisungen in Objective-C. Schauen Sie sich das Folgende an ob
Anweisung in Objective-C.
NSArray * array = @ []; if (array.count) NSLog (@ "Das Array enthält ein oder mehrere Elemente."); else NSLog (@ "Das Array ist leer.");
Wenn wir das obige Code-Snippet nach Swift portieren, stoßen wir auf einen Fehler. Der Fehler ist nicht sehr informativ, aber Swift sagt uns, dass wir sicherstellen müssen, dass das Ergebnis der Bedingung ausgewertet wird wahr
oder falsch
.
Der korrekte Weg, um das obige Objective-C-Snippet in Swift zu übersetzen, besteht darin, den Zustand des zu überprüfen ob
Anweisung ausgewertet zu wahr
oder falsch
, wie im folgenden Ausschnitt.
let array = [String] () if array.count> 0 print ("Das Array enthält ein oder mehrere Elemente.") else print ("Das Array ist leer.")
Schalter
Swift's Schalter
Anweisung ist leistungsfähiger als ihre Objective-C-Entsprechung. Es ist auch sicherer, da Sie gleich lernen werden. Es gibt zwar einige Unterschiede, Schalter
Aussagen in Swift folgen demselben Konzept wie in anderen Programmiersprachen; ein Wert wird an den übergeben Schalter
Anweisung, und es wird mit möglichen Übereinstimmungsmustern verglichen.
Das stimmt, Muster. Wie gesagt, a Schalter
Aussage in Swift hat ein paar Tricks im Ärmel. Wir werden uns diese Tricks gleich ansehen. Lassen Sie uns zuerst über Sicherheit sprechen.
EIN Schalter
Die Anweisung in Swift muss erschöpfend sein, was bedeutet, dass jeder mögliche Wert des Typs, der an den übergeben wird Schalter
Anweisung muss von der behandelt werden Schalter
Aussage. Wie in Objective-C kann dies leicht durch Hinzufügen von a gelöst werden Standard
wie im folgenden Beispiel gezeigt.
lassen Sie a = 10 ein case 0: print ("a ist gleich 0"). case 1: print ("a ist 1") default: print ("a hat einen anderen Wert")
Ein wichtiger Unterschied bei der Implementierung von Objective-C von Schalter
Aussagen sind das Fehlen eines impliziten Durchschlags. Das folgende Beispiel funktioniert aus verschiedenen Gründen in Swift nicht.
lassen Sie a = 10 einen Fall wechseln case 0: case 1: print ("a ist gleich 1") default: print ("a hat einen anderen Wert")
Der erste Fall, in dem ein
wird mit verglichen 0
fällt nicht implizit auf den zweiten Fall, in dem ein
wird mit verglichen 1
. Wenn Sie das obige Beispiel zu Ihrem Spielplatz hinzufügen, werden Sie feststellen, dass Swift einen Fehler auf Sie abgibt. Der Fehler besagt, dass jeder Fall mindestens eine ausführbare Anweisung enthalten muss.
Beachten Sie, dass die Fälle von Schalter
Aussage nicht enthalten brechen
Aussagen aus dem ausbrechen Schalter
Aussage. In Swift ist dies nicht erforderlich, da in Swift kein impliziter Fallthrough vorliegt. Dadurch werden eine Reihe allgemeiner Fehler beseitigt, die durch unbeabsichtigtes Durchfallen verursacht werden.
Die Kraft eines Schalter
Aussage in Swift liegt im Mustervergleich. Schauen Sie sich das folgende Beispiel an, in dem ich Bereiche verwendet habe, um den betrachteten Wert mit dem zu vergleichen.
laßt a = 10 ein case 0… <5: print("The value of a lies between 0 and 4.") case 5… 10: print("The value of a lies between 5 and 10.") default: print("The value of a is greater than 10.")
Das … <
Operator oder halboffener Operator definiert einen Bereich vom ersten Wert zum zweiten Wert, ausschließlich des zweiten Werts. Das …
Operator oder geschlossener Bereich definiert einen Bereich vom ersten Wert zum zweiten Wert einschließlich des zweiten Werts. Diese Operatoren sind in vielen Situationen sehr nützlich.
Sie können auch den betrachteten Wert von a vergleichen Schalter
Anweisung zu Tupeln. Sehen Sie sich das folgende Beispiel an, um zu sehen, wie das funktioniert.
lass latlng = (34.15, -78.03) umschalten latlng case (0, 0): print ("Wir sind in der Mitte des Planeten.") case (0 ... 90, _): print ("Wir sind in die nördliche Hemisphäre. ") - Fall (-90… 0, _): print (" Wir befinden uns in der südlichen Hemisphäre. ") Standardeinstellung: print (" Die Koordinate ist ungültig. ")
Wie Sie im obigen Beispiel sehen können, ist es möglich, dass der Wert mehr als einem Fall entspricht. In diesem Fall wird der erste übereinstimmende Fall ausgewählt. Das obige Beispiel veranschaulicht auch die Verwendung des Unterstrichs. Wie wir im vorherigen Artikel gesehen haben, können wir einen Unterstrich verwenden, _
, um Swift mitzuteilen, an welchen Werten wir nicht interessiert sind.
Wertbindung ist auch mit möglich Schalter
Anweisungen, wie das folgende Beispiel zeigt. Der zweite Wert des Tupels ist vorübergehend an die Konstante gebunden Beschreibung
zur Verwendung im ersten und zweiten Fall.
var response = (200, "OK") Schalterantwort case (200… <400, let description): print("The request was successful with description \(description).") case (400… <500, let description): print("The request was unsuccessful with description \(description).") default: print("The request was unsuccessful with no description.")
zum
Das zum
loop ist das erste Schleifenkonstrukt, das wir uns ansehen. Es verhält sich sehr ähnlich zu zum
Schleifen in anderen Sprachen. Früher gab es zwei Geschmacksrichtungen zum
Schleife und die für in
Schleife. Ab Swift 3 jedoch C-Style zum
Schleifen sind nicht mehr verfügbar. Das folgende Snippet ist in Swift 3 nicht möglich.
für var i = 0; ich < 10; i++ print("i is equal to \(i).")
Wenn Sie dieses Snippet auf einem Spielplatz einfügen, werden Sie auch feststellen, dass ++
und --
Operatoren stehen in Swift 3 nicht mehr zur Verfügung.
Das für in
loop ist ideal, um den Inhalt eines Bereichs oder einer Sammlung zu durchlaufen. Im folgenden Beispiel werden die Elemente eines Arrays durchlaufen.
lass Zahlen = [1, 2, 3, 5, 8] für Zahlen in Zahlen print ("Zahl ist gleich \ (Zahl)")
Wir können auch verwenden für in
Schleifen, um die Schlüssel-Wert-Paare eines Wörterbuchs zu durchlaufen. Im folgenden Beispiel deklarieren wir ein Wörterbuch und drucken dessen Inhalt auf die Konsole. Wie wir zuvor in dieser Serie gesehen haben, ist die Reihenfolge der Schlüssel-Wert-Paare undefiniert, da ein Wörterbuch eine ungeordnete Menge von Schlüssel-Wert-Paaren ist.
var-Gebote = ["Tom": 100, "Bart": 150, "Susan": 120] für (Name, Gebot) in Geboten print ("\ (Name)) Das Gebot ist $ \ (Gebot).")
Jedes Schlüsselwertpaar des Wörterbuchs ist in der Datei verfügbar für in
Schleife als Tupel benannter Konstanten. Das für in
Schleife ist auch in Kombination mit Reichweiten großartig. Ich bin sicher, Sie stimmen zu, dass das unten abgebildete Snippet dank der Verwendung eines geschlossenen Bereichs einfach zu lesen und zu verstehen ist.
für i in 1… 10 print ("i ist gleich \ (i)")
während
Das während
Schleife gibt es in zwei Geschmacksrichtungen, während
und Wiederholung
. Der Hauptunterschied besteht darin, dass die Menge von Anweisungen von a Wiederholung
Schleife wird immer mindestens einmal ausgeführt, weil der Zustand der Wiederholung
wird am Ende jeder Iteration ausgewertet. Das folgende Beispiel veranschaulicht diesen Unterschied.
var c = 5 var d = 5 und c < d print("c is smaller than d") repeat print("c is smaller than d") while c < d
Die Druckaussage des während
Schleife wird nie ausgeführt, während die der Wiederholung
Schleife wird einmal ausgeführt.
In vielen Fällen, zum
Schleifen können als neu geschrieben werden während
Schleifen, und oft muss der Entwickler entscheiden, welche Art von Schleife in einer bestimmten Situation verwendet werden soll. Folgende zum
und während
Schleifen ergeben die gleiche Ausgabe.
für i in 0… <10 print(i) var i = 0 while i < 10 print(i) i += 1
In Swift gibt es viel mehr zu steuern als in diesem Artikel, aber Sie haben jetzt ein grundlegendes Verständnis, um Ihre Reise in Swift fortzusetzen. Ich hoffe, dieses Tutorial hat Ihnen gezeigt, dass die Implementierung des Kontrollflusses in Swift der von anderen Programmiersprachen sehr ähnlich ist - allerdings mit einem gewissen Unterschied.
Im Rest dieser Serie werden wir die Kontrollflusskonstrukte von Swift stärker nutzen, und Sie werden allmählich ein besseres Verständnis für die subtilen Unterschiede zwischen Swift und Sprachen wie Objective-C erhalten. In der nächsten Ausgabe dieser Serie werden wir die Funktionen erkunden.
Wenn Sie einen schnellen Einstieg in das Erstellen von Apps mit der Sprache Swift wünschen, haben wir dafür einen Kurs!
Oder sehen Sie sich einige unserer anderen Tutorials und Kurse zu Swift und iOS-Entwicklung an!