In Swift wird das Range Matching häufig im Switch-Case verwendet, um Werte mit Bereichen zu vergleichen. Hierfür werden die Operatoren ..< (halb-offener Bereich) und ... (geschlossener Bereich) verwendet:
let score = 76 switch score { case 0..<60: print("Ungenügend") case 60..<80: print("Ausreichend") case 80...100: print("Sehr gut") default: print("Ungültiger Wert") }
Besonderheiten:
Was passiert, wenn in switch ein Bereich mit einer oberen Grenze verwendet wird, die den Wert nicht einschließt (zum Beispiel 0..<5), und die Variable gleich 5 ist?
Oft wird gesagt, dass dieser Case greifen wird, was jedoch falsch ist: Der Operator ..< schließt die obere Grenze nicht ein. Beispiel:
let value = 5 switch value { case 0..<5: print("0-4") case 5: print("fünf") default: print("anderes") } // Gibt aus: "fünf"
Geschichte
Ein Entwickler implementierte die Anzeige der Benutzerpunkte nach Bereichen, indem er einen geschlossenen Bereich verwendete, bei dem die obere Grenze über dem maximal möglichen Wert lag. Dies führte dazu, dass einige Werte in zwei Bereiche fielen und die Logik nicht korrekt arbeitete.
Geschichte
In einer Anwendung wurde ein Switch-Case mit Bereichen verwendet, wobei ein Wert in keinen Bereich passte, aufgrund der falschen Verwendung des Operators (zum Beispiel 0...10 und 11...20 – der Wert 10,5 passte nirgendwo hin). Der Bug wurde erst in der Produktion entdeckt.
Geschichte
Im Code des Dienstes wurden Daten durch Range Matching verglichen, wobei der half-open range falsch verwendet wurde: das Enddatum wurde nicht einbezogen, was dazu führte, dass gültige Intervalle ausgeschlossen wurden, was die Buchung des letzten zulässigen Tages unmöglich machte.