苹果文档说
每个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??的所有案例值。但是我仍然遇到错误?为什么会出现此错误,我错过了什么吗?
case 0...65535:
UInt16
Swift仅switch在处理enum类型时才真正验证一个块是否完整。即使打开,除了和之外都Bool需要一个default块:true``false
switch
enum
Bool
default
true``false
var b = true switch b { case true: println("true") case false: println("false") } // error: switch must be exhaustive, consider adding a default clause
有enum,但是,编译器很乐意只能看两种情况:
enum MyBool { case True case False } var b = MyBool.True switch b { case .True: println("true") case .False: println("false") }
如果default出于编译器的需要而需要包含一个块,但没有任何要做,则可以使用该break关键字:
break
var b = true switch b { case true: println("true") case false: println("false") default: break }