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?
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
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
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