【发布时间】:2025-12-14 04:10:01
【问题描述】:
对于没有默认情况的 Double 类型,快速切换可以穷举吗?
这个开关(没有默认情况)给出错误:开关必须是详尽的:
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
}
我尽量避免使用我的开关的默认情况,但不知道是否可以使用 Double。
【问题讨论】:
-
您的第一个
switch并未涵盖所有情况。您还需要处理NaNs。 (虽然我不知道这是否会修复编译器错误。) -
你也没有处理过 inf。无论如何,我认为编译器没有检查来确定整数/双精度数的穷举
-
不相关:
-(Double.infinity)..<0.9可以写成..<0.9 -
嗯,你可以不用
default来做到这一点,只需使用case _:匹配任何东西,但我知道这也不是你想要的。