迅速开关可以详尽类型双没有默认情况下?
这个开关(没有默认情况下)给出了错误:开关必须是穷举:
var minY = 1.0
switch minY {
case -(Double.infinity)..<0.9:
yAxisMinimum = 0.0
case (0.9..<0.99):
yAxisMinimum = 0.9
case (0.99..<0.999):
yAxisMinimum = 0.99
case (0.999..<0.9999):
yAxisMinimum = 0.999
case (0.9999...Double.infinity):
yAxisMinimum = 0.9999
}
但这个开关,与(没用)默认情况下,工作原理:
var minY = 1.0
switch minY {
case -(Double.infinity)..<0.9:
yAxisMinimum = 0.0
case (0.9..<0.99):
yAxisMinimum = 0.9
case (0.99..<0.999):
yAxisMinimum = 0.99
case (0.999..<0.9999):
yAxisMinimum = 0.999
case (0.9999...Double.infinity):
yAxisMinimum = 0.9999
default:
yAxisMinimum = 0.0
}
我会尽量避免默认情况下,我的开关,但不知道如果可能的话用双。
联四的zxsw POI。
但在这种情况下,问题是更深。即使整数可以详尽检查,你还是没能彻底检查双无because only enum types can be exhaustively checked条款。其中一个选项是where
(“不是一个数字”),这你不考虑。所以,你可能会认为只需添加这种情况下:
.nan
不仅不会这使它详尽,它甚至不会工作,你所希望的方式。
case .nan:
yAxisMinimum = .nan
为什么?因为这:
var minY = Double.nan
switch minY {
case -(Double.infinity)..<0.9:
yAxisMinimum = 0.0
// ...
case .nan:
yAxisMinimum = .nan
default:
yAxisMinimum = 0
}
yAxisMinimum // 0
为NaN不等于一切,包括为NaN。因此,有没有办法直接在switch语句中包含它。你必须使用一个var minY = Double.nan
minY == .nan // false
条款:
where
而这绝对超出编译器的验证能力。