由于Swift模式匹配中的顺序导致意外结果

nsc*_*hum 6 pattern-matching swift

对不起,"这不应该工作吗?" 题.但我无法想出一个更好的方式来表达这一点.

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"
Run Code Online (Sandbox Code Playgroud)

x求值为"default",表示采用了默认分支.

但是,我期待"(something, A)"和第二个案例陈述相匹配.根据我的理解,(_, .A)应该匹配第一个元组元素和.A第二个元素中的任何内容.

如果我将(_, .A)表壳移到顶部,它会按照我的预期进行匹配.其他元组也匹配我期望的位置.

我错过了什么?为什么这不符合第二种情况?

Zap*_*hod 2

此行为已在 beta 3 中得到纠正。现在它显示(Something, A)任何顺序。