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

时间:2014-06-11 18:33:12

标签: 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"

x评估为"default",这意味着采用了默认分支。

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

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

我错过了什么?为什么第二种情况不匹配?

1 个答案:

答案 0 :(得分:1)

此行为已在测试版3中得到纠正。无论订单如何,它现在都会显示(Something, A)