Swift 中开关盒的详尽条件

2023-11-22

苹果文档 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(使用前将#替换为@)

Swift 中开关盒的详尽条件 的相关文章

随机推荐