[Swift] switch-Anweisung mit tapple

1. Zuallererst


Dieses Mal möchte ich eine etwas andere Verwendung einführen, die den Taple-Wert für die bedingte Verzweigung der Switch-Anweisung verwendet. Ich denke, es ist eine effektive Möglichkeit, es je nach Situation zu verwenden. Schauen Sie also bitte mal rein.

2. Verwenden Sie für den Fall Tapple


Wenn Sie sich den Taple als Konstante vorstellen und ihn auf das Gehäuseetikett setzen, können Sie zunächst schreiben: Alle Tapple-Typen müssen jedoch gleich sein. In diesem Beispiel wird davon ausgegangen, dass der variable Tag einen Taple hat, der ein Datum darstellt, das aus Monaten und Tagen besteht. Es wird angezeigt, wenn es mit einem der drei aufgeführten Feiertage übereinstimmt.

python


switch day {
case (1,1): print("Neujahr")
case (2,11): print("Gründungstag")
case (5,3): print("Verfassungsjubiläum")
default: break
}

Mit dem Bereichsoperator können Sie einen Datumsbereich darstellen. Überprüfen Sie beispielsweise das folgende Beispiel.

python


switch day {
case (1,1...5): // 1/1 ~ 1/5
    print("Neujahrsferien")

case (5,3): print("Verfassungsjubiläum")

case (4,29), (5,2...6):
    print("Aufeinanderfolgende Feiertage")

default: break
}

Neben der Aufzählung der Werte können Sie auch die Elemente des Taples abrufen und für die Verarbeitung verwenden. Zu diesem Zweck können Sie let oder var in die case-Bezeichnung schreiben, um Konstanten und Variablen zu deklarieren, die nur innerhalb der case-Klausel gültig sind.

python


switch day {
case (5,3): print("Verfassungsjubiläum")
case (8, let d): print("8/\(d)Ist Sommerurlaub")
default: break
}

In diesem Beispiel sind alle Augustdaten Sommerferien. Wenn Sie die Variable d nicht verwenden müssen, können Sie auch "_" verwenden und schreiben:

python


case (8, _): print("Sommerurlaub")

Sie können auch ein Taple mit einem Schlüsselwort in der switch-Anweisung verwenden. Es tritt jedoch ein Fehler auf, wenn der Wert und das in der Fallbezeichnung verwendete Schlüsselwort nicht übereinstimmen. In Swift wird der allgemeine Prozess zum Überprüfen der Struktur- und Wertübereinstimmung, z. B. die Entsprechung zwischen Tapple- und Case-Labels, als ** Pattern Matching ** bezeichnet.

3. Verwenden Sie die where-Klausel in der switch-Anweisung


Sie können die Elemente des Taples auch mit der switch-Anweisung konditionieren. Hier verwenden wir die Funktion dayOfWeek, die den Tag aus dem Datum berechnet. Diese Funktion gibt den Tag als Ganzzahl zurück, z. B. 0 für Sonntag, 1 für Montag usw. Beachten Sie, dass das variable Jahr das Jahr des Jahres hat. Beschreiben Sie beim Hinzufügen einer Bedingung zum Falletikett das reservierte Wort where und die Bedingung zwischen dem Etikett und ":". Überprüfen Sie das folgende Beispiel.

python


switch day {
case (1, let d) where d >= 8 && d <= 14 && dayOfWeek(year,1,d) == 1:
    print("Erwachsenentag")

case (8, _): print("Sommerurlaub")

case (let m, let d) where dayOfWeek(year,m,d) == 0:
    print("\(m)/\(d)Ist Sonntag")

default: break
}

Hier ist die Bedingung, dass der zweite Montag im Januar der Erwachsenentag ist. Ebenso wird es zu jeder Jahreszeit sonntags angezeigt. Wenn Sie alle Elemente eines Taples einer Konstanten wie dieser Fallbezeichnung zuweisen möchten, können Sie für jedes Element eine Let angeben, aber Sie können auch nur eine Let vor dem Tapple schreiben.

python


case let (m, d) where dayOfWeek(year,m,d) == 0:
    print("\(m)/\(d)Ist Sonntag")

Die Methode zum Festlegen von Bedingungen mit let, var und where in the case label kann nicht nur für Tapples, sondern auch für gewöhnliche Ganzzahlen verwendet werden.

Beschriftungen, die Konstanten und Variablen verwenden, unterliegen Einschränkungen, wenn sie separat angeordnet und durch "," getrennt sind. Dies liegt daran, dass Konstanten und Variablen möglicherweise keinen Wert haben, je nachdem, welche Beschriftungsbedingungen erfüllt sind. Sie können beispielsweise Folgendes nicht tun:

python


switch t {
case (1, let y), (2, 2):
    print("\(y)")

case (2, _):
    fallthrough

case (let z, 2):
    print("\(z)")
default: break
}

Sie können die Fallthrough-Anweisung nicht verwenden, um zu einer case-Klausel überzugehen, die Konstanten oder Variablen in der case-Bezeichnung aus den unmittelbar obigen Optionen verwendet.

Wenn Beschriftungen getrennt durch "," aufgelistet werden, ist die Bedingung, dass sie Konstanten oder Variablen enthalten können, dass alle Beschriftungen Konstanten oder Variablen mit demselben Namen und Typ enthalten. Mit anderen Worten muss in jedem Fall der Wert einer Konstanten oder Variablen bestimmt werden. Bitte seien Sie nur in diesem Punkt vorsichtig.

4. Verwenden Sie den optionalen Typ in der switch-Anweisung


Auch wenn der Ausdruck, den Sie in der switch-Anweisung trennen möchten, einen optionalen Typwert enthält, können Sie ihn durch die Groß- / Kleinschreibung trennen. Betrachten Sie als Beispiel den Tappeltyp, der aus Name und Alter besteht. Da das Alter jedoch unbekannt sein kann, handelt es sich um einen optionalen Typ.

python


typealias People = (String, Int?)

Verwenden Sie das Symbol "?" Im Fallmuster, um solche Typen in der Switch-Anweisung zu behandeln.

python


switch m {
case let (name, age?) where age >= 18:
    print("\(name),Lizenz kann erhalten werden")

case let (name, (15...18)?):
    print("\(name),Schüler")

case (let name, nil):
    print("\(name),Unbekanntes Alter")

default: break
}

Auf diese Weise stimmt das Hinzufügen von "?" Zur entsprechenden Konstante oder Variablen überein, wenn der optionale Typ einen anderen Wert als nil hat, und Sie können auf den Wert in der nachfolgenden where-Klausel oder Ausführung verweisen, ohne den Offenlegungsoperator zu verwenden. Ich werde. Wenn Sie nil beschreiben, stimmt dies auch überein, wenn der optionale Typ den Wert nil hat. Fügen Sie das Muster ein, das den Bereich in () angibt.

Das "?", Um anzuzeigen, dass es optional ist, kann für andere Muster wie z. B. Tapples verwendet werden. Wenn beispielsweise die Variable ops vom Typ Pepole? In der switch-Anweisung verwendet wird, kann der Fall wie folgt beschrieben werden.

python


switch ops {            //ops ist Menschen?Schimmel
case let (name, 18?)? : //Das offenbarte Ergebnis ist(String, 18)Dann passen

5. Schlussfolgerung


Dieses Mal schrieb ich darüber, wie man die switch-Anweisung mit tapples verwendet. Das nächste Mal werde ich einen Artikel über ** Aufzählungstyp ** schreiben. Schauen Sie also bitte nach, wenn Sie möchten. Vielen Dank an alle, die dies bisher gesehen haben.

Recommended Posts

[Swift] switch-Anweisung mit tapple
switch-Anweisung
Java-Switch-Anweisung
Bereichsspezifikation für switch-Anweisungen
Studieren der Java-Part 11-switch-Anweisung
Lassen Sie uns die switch-Anweisung verstehen!
[Swift] Asynchrone Verarbeitung mit PromiseKit
[Java] Verzweigungsaufzählung mit switch-Anweisung
[Swift] Über die iterative Verarbeitung von "for-in-Anweisungen"
[Java] Die Geschichte einer wirklich beängstigenden switch-Anweisung
Ich habe eine großartige switch-Anweisung getroffen