W Swift matchowanie zakresów często używa się w switch-case do porównywania wartości z zakresami. W tym celu stosuje się operatory ..< (half-open range) i ... (closed range):
let score = 76 switch score { case 0..<60: print("Niedostateczny") case 60..<80: print("Dostateczny") case 80...100: print("Doskonały") default: print("Niepoprawna wartość") }
Cechy:
Co się stanie, jeśli w switch użyjemy zakresu z górną granicą, która nie obejmuje wartości (na przykład 0..<5), a zmienna wynosi 5?
Często odpowiadają, że taki case zadziała, ale to nieprawda: operator ..< nie obejmuje górnej granicy. Przykład:
let value = 5 switch value { case 0..<5: print("0-4") case 5: print("pięć") default: print("inne") } // Wyświetli: "pięć"
Historia
Programista wdrożył mapowanie punktów użytkownika według zakresów, używając closed range, gdzie prawa granica była powyżej maksymalnej możliwej wartości. Prowadziło to do tego, że niektóre wartości trafiały od razu do dwóch przedziałów, a logika działała niepoprawnie.
Historia
W aplikacji użyto switch-case z zakresami, gdzie jedna z wartości nie weszła w żaden zakres z powodu niewłaściwego użycia operatora (na przykład 0...10 i 11...20 — a wartość 10.5 nigdzie nie trafiła). Błąd został odkryty dopiero na produkcji.
Historia
W kodzie usługi porównywano daty za pomocą matchowania zakresów, używając half-open range w sposób niepoprawny: końcowa data nie była włączona, co skutkowało odrzucaniem poprawnych przedziałów, prowadząc do niemożności zarezerwowania daty na ostatni dozwolony dzień.