swift中的switch bug? - " Switch必须是详尽的,考虑添加一个默认子句。"

时间:2016-04-21 07:06:18

标签: swift switch-statement

我很肯定以下 swift 代码涵盖了所有可能性,但Xcode一直告诉我," Switch必须详尽无遗,请考虑添加默认子句。&# 34;

谁能告诉我,我错过了什么?感谢。

let a = false
let b = false
let c = false

func test(a: Bool, _ b: Bool, _ c: Bool) {
    switch (a, b, c) {
    case (true, false, _):
        print("Moved left!!!")
    case (true, true, _):
        print("Moved right!!!")
    case (false, _, false):
        print("Moved up!!!")
    case (false, _, true):
        print("Moved down!!!")
    // Error: Switch must be exhaustive, consider adding a default clause.
    }
}

test(false, false, false)
test(false, false, true)
test(false, true, false)
test(false, true, true)
test(true, false, false)
test(true, false, true)
test(true, true, false)
test(true, true, true)

3 个答案:

答案 0 :(得分:2)

编译器无法对您的模式进行总结,因为它太复杂或太不寻常。如果您的模式更常规,如:

instances = { i.name: i for i in instances }.values()
然后编译器就不会抱怨了。在这种情况下,它很容易得出结论,你已经涵盖了所有案例。

答案 1 :(得分:1)

在Swift中,switch语句必须始终为所有可能的情况提供选项。如果您有枚举,则可以添加所有枚举值,switch将是详尽无遗的。如果它并非详尽无遗,则需要添加default个案,这将在没有其他案例匹配时触发。

如果要打开变量,则应该耗尽所有情况。如果您这样做,则不需要default个案例。

程序员可能会看到此开关是详尽无遗的,但编译器却没有。这就是您收到错误的原因,您可以通过添加默认情况来修复它。

答案 2 :(得分:0)

如果计算具有两个可能值的三个元素之间的所有可能组合,则情况超过四个。如果您不关心其他人,请在您的交换机中添加default个案例