据我了解,不应该穷举且没有默认情况的switch语句。我正在计划使用此功能,因为我有一个包含很多情况的枚举,而且我喜欢让编译器将我定向到每个添加条件时都必须更新的switch语句。
enum Scalar {
case unhandled
case handled
indirect case third(Vector2)
indirect case fourth(Vector2,Vector2)
}
enum Vector2 {
case handled(Scalar,Scalar)
indirect case unhandled(Scalar,Vector2)
}
extension Scalar {
func eval() -> Int {
switch self {
case .handled: return 1
case .third: return 2
}
}
}
extension Vector2 {
func eval() -> (Int,Int) {
switch self {
case .handled: return (3,6)
}
}
}
let g = Scalar.handled
print(g.eval())
let h = Scalar.unhandled
print(h.eval())
但是,事实证明,尽管大多数switch语句在未穷尽时都无法编译,但是当切换我的枚举时,非穷尽的开关将编译,甚至不会发出警告。在运行时,如果开关被其中一种情况未处理的枚举击中,则会引发运行时错误。
Thread 1: Fatal error: unexpected enum case while switching on value of type 'Scalar'
我正在使用OSX 10.14.2,Xcode 10.1,Swift 4.2
我很困惑,因为我无法迅速找到有关这种switch语句的任何信息。当编译器遇到非详尽的switch语句时,如何警告我?