2014-06-11 12 views
6

Entschuldigung für die "Sollte das nicht funktionieren?" Frage. Aber ich kann mir keinen besseren Weg ausdenken.Unerwartetes Ergebnis aufgrund der Reihenfolge in Swifts Musterabgleich

enum MyEnum { 
    case A, B, C 
} 

let tuple = (MyEnum.C, MyEnum.A)  
var x: String 

switch tuple { 
case (.A, _): 
    x = "(A, something)" 
case (_, .A): 
    x = "(something, A)" 
case (_, .B): 
    x = "(something, B)" 
case (.C, .C): 
    x = "(C, C)" 
default: 
    x = "default" 
} 

x // -> "default" 

x ausgewertet "default", was bedeutet, dass die Standard-Verzweigung genommen wurde.

Allerdings erwartete ich "(something, A)" und die zweite Case-Anweisung zu entsprechen. Von dem, was ich verstanden habe (_, .A) sollte alles im ersten Tupel-Element übereinstimmen, und .A in der zweiten.

Wenn ich den (_, .A) Fall an die Spitze verschiebe, wird es wie erwartet übereinstimmen. Andere Tupel stimmen auch dort überein, wo ich sie erwarte.

Was fehlt mir? Warum passt das nicht zum zweiten Fall?

+4

Interessant reproduzierbar ... Auch wenn ich eine der anderen case-Anweisungen (außer "default") auskommentiere, funktioniert es wie erwartet. Sieht aus wie ein Fehlerbericht benötigt wird! – Jack

+0

Es scheint, als ob jede andere Bestellung der Testfälle das richtige Ergebnis liefert ... zu überprüfen, ob es eine Spielplatz-Sache ist oder nicht .. – Jack

+0

Es ist nicht. Ich habe es beim Schreiben einer regulären App gefunden. :) Ich werde definitiv einen Fehlerbericht einreichen, es sei denn jemand hier weist auf einen Fehler hin. – nschum

Antwort

1

Dieses Verhalten wurde in Beta 3 korrigiert. Es zeigt jetzt (Something, A), was auch immer die Reihenfolge ist.