Überrascht es Sie, dass ich ein Tutorial für eine einfache Ergänzung als bewachen
Aussage? Ich hoffe, Sie werden meine Aufregung am Ende dieses Tutorials besser verstehen. Während dieses Tutorials hoffe ich, Sie davon zu überzeugen bewachen
ist alles andere als eine redundante Ergänzung der Programmiersprache Swift.
Bedingungen sind ein grundlegender Bestandteil jeder Programmiersprache. Objective-C und Swift bilden keine Ausnahme von dieser Regel. Wenn Sie vorhaben, eine Anwendung von beliebiger Komplexität zu schreiben, kreuzen sich die Bedingungen an Ihrem Weg, es gibt kein Entkommen.
Leider sind Bedingungen oft die Ursache von Komplexität. Insbesondere verschachtelte Bedingungen können zu schwer zu findenden Fehlern, schwer verständlichem Code und leicht übersehenen Randfällen führen.
Verschachtelt bleiben ob
Aussagen zu einem Minimum, verwende ich häufig das folgende Muster in Objective-C.
- (void) fetchListOfCustomers: (NSArray *) Kunden if (! self.reachable) return; if (! self.connected) return; if (! Kunden ||! [Kunden zählen]) zurück;…
Die Idee ist, so schnell wie möglich zu retten. Das ob
Anweisungen im Beispiel stellen eine Reihe von Anforderungen dar, die erfüllt sein müssen, bevor der Rest des Methodenkörpers ausgeführt wird.
Das obige Beispiel übersetzt das folgende etwas komplexere Äquivalent.
- (void) fetchListOfCustomers: (NSArray *) Kunden if (self.reachable && self.connected) if (Kunden && [Kunden zählen]) …
Sehen Sie das Problem in diesem Beispiel? Wir sind bereits zwei Ebenen tief verschachtelt, ohne etwas Interessantes getan zu haben.
Es ist einfach, das obige Muster in Swift zu übersetzen. Die Syntax sieht ähnlich aus, aber wegen Kunden
Da dies optional ist, müssen wir das auspacken Kunden
Argument, bevor wir auf seinen Wert zugreifen können.
func fetchListOfCustomers (Kunden: [Kunde]?) wenn! erreichbar return if! connected return wenn Kunden = Kunden sind, bei denen customer.count> 0 print (Kunden)
Swift 2 führt die bewachen
Aussage. Es wurde speziell für das frühe Beenden einer Methode oder Funktion entwickelt. Das bewachen
Diese Anweisung ist ideal, um tief verschachtelte Bedingungen zu beseitigen, deren einziger Zweck darin besteht, eine Reihe von Anforderungen zu überprüfen. Schauen Sie sich das aktualisierte Beispiel an, in dem ich jedes ersetzt habe ob
Aussage mit dem Neuen bewachen
Aussage.
func fetchListOfCustomers (Kunden: [Kunde]?) Wache erreichbar sonst Zurück Wache verbunden sonst Zurück Wache Kunden = Kunden, bei denen Kunden.Zahl> 0 sonst Zurück drucken (Kunden)
Es gibt einige Dinge, die es zu beachten gilt. Beginnen wir mit der Syntax.
Das bewachen
Das Keyword betont, dass wir eine Anforderung überprüfen. Wir sind Bewachung gegen etwas. Im Beispiel wird explizit geprüft, ob erreichbar
und in Verbindung gebracht
sind wahr
. Wenn dies nicht der Fall ist, verlassen wir die Methode frühzeitig. Der Punkt ist, dass die Syntax über die Anforderungen expliziter ist als eine reguläre ob
Aussage.
Beachten Sie, dass a bewachen
Aussage hat immer eine sonst
Klausel. Das sonst
Klausel wird ausgeführt, wenn die Bedingung der bewachen
Anweisung ausgewertet zu falsch
. Verwenden bewachen
Es macht viel mehr Sinn, wenn Sie Anforderungen validieren.
In dem sonst
Klausel, müssen Sie die Kontrolle aus dem Bereich übertragen, in dem die bewachen
Anweisung erscheint. Wir benutzen ein Rückkehr
Anweisung im obigen Beispiel, Sie können jedoch beispielsweise eine fortsetzen
Anweisung, wenn Sie sich in einer Schleife befinden oder einen Fehler auslösen. Schauen Sie sich das aktualisierte Beispiel an, in dem wir einen Fehler in der sonst
Klausel. Beachten Sie das wirft
Schlüsselwort in der Methodendeklaration, um dies anzuzeigen fetchListOfCustomers (_ :)
ist eine Wurfmethode.
func fetchListOfCustomers (Kunden: [Kunde]?) wirft Wache erreichbar, sonst, APIError.APIErrorUnreachable.
EIN bewachen
Aussage ist genauso mächtig wie eine ob
Aussage. Sie können optionale Bindungen und sogar die Verwendung von verwenden woher
Klauseln, die in Swift 1.2 eingeführt wurden, sind zulässig. Ich bin sicher, Sie stimmen zu, dass das Beispiel einfach zu verstehen ist und unnötige verschachtelte Bedingungen eliminiert.
Ein wichtiger Unterschied zu ob
Anweisungen ist der Bereich von Variablen und Konstanten, denen mithilfe einer optionalen Bindung Werte zugewiesen werden. Im obigen Beispiel ist das Kunden
Konstante wurde über eine optionale Bindung ein Wert zugewiesen. Das Kunden
Konstante ist aus dem Umfang der bewachen
Die Anweisung erscheint in. Dies ist ein wichtiges Detail und einer der wichtigsten Vorteile der Verwendung bewachen
.
Wenn du das gedacht hast bewachen
war eine einfache Variante von Swift ob
Aussage, dann hoffe ich, ich habe dich sonst überzeugt. Während ob
Anweisungen werden in den meisten Situationen weiterhin das Mittel der Wahl sein, bewachen
hat in bestimmten Situationen eine Reihe von Vorteilen. Dies gilt insbesondere für die Kombination mit der Fehlerbehandlung, die auch in Swift 2 eingeführt wurde.