2015-06-08 6 views
30

Kürzlich habe ich die Keynote der WWDC 2015 von Apple gesehen. Ich habe mir auch einige Dokumentationen angeschaut, aber ich kann keinen "Mustervergleich in if" Abschnitt finden, wie er auf einer der Folien, die sie gezeigt haben, geschrieben wurde. (68min 00sec Video von Apple Events)Swift 2 - Mustererkennung in "if"

Wissen Sie, worauf sich das bezieht? Oder die Syntax?

Antwort

57

Alles, was es wirklich bedeutet, ist, dass wenn Anweisungen nun Mustervergleich wie Switch-Anweisungen bereits unterstützen. Zum Beispiel ist das Folgende jetzt ein gültiger Weg, if/else if/else-Anweisungen zu verwenden, um die Fälle einer enum zu "wechseln".

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

und Folgendes wird nun eine akzeptable Art und Weise der Überprüfung, ob someInteger innerhalb eines bestimmten Bereichs liegt.

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

Hier sind ein paar Beispiele, die die optionale Muster von 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

Und die letzten beiden Aussagen sind mit - wenn ich es richtig verstanden habe - das entspricht dem bekannten 'wenn wir x = someOptional {} '. –

+1

Das ist eine aufregende Aussicht, darauf habe ich gewartet, seit Swift herauskam. – cjnevin

+7

@MartinR Ja, sie sind, die Sie wundern können, warum das optionale Muster nützlich sein kann, anstatt die optionale Bindungssyntax 'if let x = someOptional' zu verwenden. In der Tat ist das nicht sehr nützlich, wenn es in einfachen 'if'-Anweisungen wie hier verwendet wird, aber nützlicher für' for' oder 'while'-Schleifen (wie' für case let x? In arrayOfOptionalInt', das nur auf Nicht-Null-Werten im array), oder für komplexere 'if'-Anweisungen wie' if case let (x ?, y?) in someFuncThatReturnsATupleOfOptional() ', die nur dann true ist, wenn beide Elemente im Tupel nicht-nil sind und dann sowohl x als auch y binden gleichzeitig. – AliSoftware