Wszystko to tak naprawdę oznacza, że jeśli instrukcje obecnie obsługują porównywanie wzorców, takie jak instrukcje przełączników, które już istnieją. Na przykład, poniżej znajduje się teraz poprawny sposób użycia instrukcji if/else if/else w celu "przełączenia" nad przypadkami wyliczenia.
enum TestEnum {
case One
case Two
case Three
}
let state = TestEnum.Three
if case .One = state {
print("1")
} else if case .Two = state {
print("2")
} else {
print("3")
}
oraz dodaje się następujące teraz akceptowalnym sposobem sprawdzenia czy someInteger
jest w danym zakresie.
let someInteger = 42
if case 0...100 = someInteger {
// ...
}
Oto jeszcze kilka przykładów korzystania z opcjonalnego wzór z The Swift Programming Language
let someOptional: Int? = 42
// Match using an enumeration case pattern
if case .Some(let x) = someOptional {
print(x)
}
// Match using an optional pattern
if case let x? = someOptional {
print(x)
}
a ostatnie dwie wypowiedzi są - jeśli dobrze rozumiem to poprawnie - odpowiednik znanego 'jeśli niech x = someOptional {} '. –
To ekscytująca perspektywa, czekałem na to odkąd Swift wyszedł. – cjnevin
@MartinR Tak, są one, co może sprawić, że zastanawiasz się, dlaczego opcjonalny wzór może być użyteczny zamiast użycia opcjonalnej składni wiązania 'if let x = someOptional'. W rzeczywistości nie jest to zbyt użyteczne, gdy jest używane w prostych instrukcjach 'if', jak tutaj, ale jest bardziej użyteczne z pętlami' for' lub 'while' (np.' Dla case niech x? In arrayOfOptionalInts', które tylko pętle na niezerowych wartościach w array), lub dla bardziej złożonych instrukcji 'if', takich jak' if case let (x ?, y?) w niektórychFuncThatReturnsATupleOfOptionals() ', które będą prawdziwe tylko wtedy, gdy oba elementy w krotce nie będą zerowe, a następnie będą wiązały zarówno x, jak i y w tym samym czasie. – AliSoftware