苹果文档 says
每个 switch 语句都必须是详尽的。也就是说,每一个可能的
正在考虑的类型的值必须与其中之一匹配
切换案例。
所以在新的 Xcode 中我放置了这样的代码
println(UInt16.min); // Output : '0'
println(UInt16.max); // Output : '65535'
var quantity : UInt16 = 10;
switch quantity {
case 0...65535: //OR case UInt16.min...UInt16.max:
println();
default:
println();
}
现在,如果我删除默认部分,我会收到编译器错误:
开关必须详尽无遗
您想添加缺失的案例吗?使固定
所以我的问题是针对我提到的一个案例case 0...65535:
我没有提到过所有的案例值吗?UInt16
??但我仍然收到错误?为什么我会收到此错误,我错过了什么吗?
Swift 仅真正验证switch
块在使用时是详尽的enum
类型。即使是开机Bool
需要一个default
块除了true
and false
:
var b = true
switch b {
case true: println("true")
case false: println("false")
}
// error: switch must be exhaustive, consider adding a default clause
With an enum
但是,编译器很乐意只查看两种情况:
enum MyBool {
case True
case False
}
var b = MyBool.True
switch b {
case .True: println("true")
case .False: println("false")
}
如果您需要包括default
为了编译器的缘故而阻止但没有任何事情可做,break
关键字派上用场:
var b = true
switch b {
case true: println("true")
case false: println("false")
default: break
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)