2015-06-08 12 views
30

Niedawno widziałem keynote WWDC 2015 od Apple. Przyjrzałem się także dokumentacji, ale nie mogę znaleźć sekcji "dopasowywanie wzorca w przypadku", w jaki sposób została napisana na jednym ze slajdów, które pokazały. (68min 00sek. Wideo od Apple Events)Swift 2 - Dopasowywanie wzorca w "jeśli"

Czy wiesz, co to oznacza? Lub składnia?

Odpowiedz

57

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) 
} 
+4

a ostatnie dwie wypowiedzi są - jeśli dobrze rozumiem to poprawnie - odpowiednik znanego 'jeśli niech x = someOptional {} '. –

+1

To ekscytująca perspektywa, czekałem na to odkąd Swift wyszedł. – cjnevin

+7

@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