ProgrammierungSwift-Entwickler

Wie funktioniert das Pattern Matching für Bereiche in Swift und welche Besonderheiten sind bei der Implementierung des Vergleichs mit Switch zu beachten?

Bestehen Sie Vorstellungsgespräche mit dem Hintsage-KI-Assistenten

Antwort

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:

  • Bereiche müssen aufsteigend sein: von klein nach groß (ansonsten ist der Bereich leer).
  • Das Matching ist erfolgreich, wenn der Wert innerhalb des Bereichs liegt.
  • Da Bereiche Strukturen sind, können sie mit allen Comparable-Typen verwendet werden.

Fangfrage

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"

Beispiele für reale Fehler aufgrund mangelnden Wissens über die Feinheiten des Themas


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.