我很肯定以下 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)
答案 0 :(得分:2)
编译器无法对您的模式进行总结,因为它太复杂或太不寻常。如果您的模式更常规,如:
instances = { i.name: i for i in instances }.values()
然后编译器就不会抱怨了。在这种情况下,它很容易得出结论,你已经涵盖了所有案例。
答案 1 :(得分:1)
在Swift中,switch
语句必须始终为所有可能的情况提供选项。如果您有枚举,则可以添加所有枚举值,switch
将是详尽无遗的。如果它并非详尽无遗,则需要添加default
个案,这将在没有其他案例匹配时触发。
如果要打开变量,则应该耗尽所有情况。如果您这样做,则不需要default
个案例。
程序员可能会看到此开关是详尽无遗的,但编译器却没有。这就是您收到错误的原因,您可以通过添加默认情况来修复它。
答案 2 :(得分:0)
如果计算具有两个可能值的三个元素之间的所有可能组合,则情况超过四个。如果您不关心其他人,请在您的交换机中添加default
个案例