苹果documentation

每个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();
}

现在,如果删除默认部分,就会出现一个编译器错误:

switch 必须详尽无遗

所以我的问题是,我提到的一个例子是case 0...65535:,我没有提到UInt16的所有例子值吗??但我还是犯了个错误??为什么我会犯这个错误,我错过了什么吗??

推荐答案

Swift只会在处理enum种类型时真正验证switch块是否详尽无遗.除了truefalse之外,即使是接通Bool也需要default块:

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关键字就很方便了:

var b = true
switch b {
case true:  println("true")
case false: println("false")
default: break
}

Swift相关问答推荐

如何使用快速宏用来自函数的关联值来初始化枚举?

按Esc键时执行操作(工作表)

在visionOS RealityView中使用.GenerateText时,未显示Reality Composer Promaterial 纹理

当TextField变为空时,不会触发onChange

从AppKit打开SwiftUI设置

DispatchQueue.main.asyncAfter 等同于 Swift 中的 struct 化并发?

如何在 macOS/AppKit 的窗口选项卡上接受拖动项目的放置?

swiftui中服务端图片如何设计view并赋予rotationEffect?

SwiftUI 从任务中安全更新状态变量

Swift 包管理器 Package.resolved 文件末尾的版本是什么意思?

使用列表的下一项更新相同的视图

令人满意的 var body:协议扩展中的一些视图

使用协议捕获 SwiftUI 视图

在 Swift 中,如何查看 Process() 传递给 shell 的字符串?

Apple 的自然语言 API 返回意外结果

临时添加到视图层次 struct 后,Weak view引用不会被释放

单元测试和私有变量

Swift 5.0 编译器无法导入使用 Swift 4.2.1 编译的模块

如何在 iOS Swift 中进行多线程、并发或并行?

iOS:检测设备是否为 iPhone X 系列(无框)