2015-06-08 16 views
30

Recentemente ho visto il keynote del WWDC 2015 di Apple. Ho anche guardato alcuni documenti ma non riesco a trovare una sezione "pattern matching in if", come è stata scritta su una delle slide che hanno mostrato. (68min 00sec video da Apple Events)Swift 2 - Pattern matching in "if"

Sai a cosa si riferisce? O la sintassi?

risposta

57

Tutto ciò che significa veramente è che se le istruzioni ora supportano la corrispondenza del modello come già hanno le istruzioni switch. Ad esempio, il seguente è ora un modo valido di usare if/else if/else per "passare" ai casi di enum.

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") 
} 

Il seguente è ora un modo accettabile di verificare se someInteger è entro un dato intervallo.

let someInteger = 42 
if case 0...100 = someInteger { 
    // ... 
} 

Qui ci sono un paio di esempi che utilizzano il modello opzionale da 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

E le ultime due affermazioni sono - se ho ben capito - equivalente al noto 'se sia x = someOptional {} '. –

+1

Questa è una prospettiva eccitante, l'ho aspettata da quando Swift è uscito. – cjnevin

+7

@MartinR sì, lo sono, il che può farti chiedersi perché il modello opzionale può essere utile invece di usare la sintassi di associazione facoltativa 'if let x = someOptional'. In effetti questo non è molto utile se usato in semplici istruzioni 'if' come qui, ma più utile con i cicli' for' o 'while' (come' per caso x? In arrayOfOptionalInts' che scorre solo su valori non nulli nel array), o per istruzioni 'if' più complesse come' if case let (x ?, y?) in someFuncThatReturnsATupleOfOptionals() 'che sarà vero solo se entrambi gli elementi nella tupla sono non-nil e quindi eseguono entrambi x e y allo stesso tempo. – AliSoftware