作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
对于没有默认大小写的 Double 类型,swift switch 是否可以详尽无遗?
此开关(没有默认情况)给出错误:开关必须详尽无遗:
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。
最佳答案
没有because only enum types can be exhaustively checked .
但在这种情况下,问题就更深了。即使可以对 Integers 进行详尽检查,如果没有 where
子句,您仍然无法对 Double 进行详尽检查。其中一个选项是 .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
为什么?正因为如此:
var minY = Double.nan
minY == .nan // false
NaN 不等于一切,包括 NaN。所以没有办法将它直接包含在 switch 语句中。您必须使用 where
子句:
case _ where minY.isNaN:
yAxisMinimum = .nan
这绝对超出了编译器的验证能力。
关于swift - 对于没有默认情况的 Double 类型,swift switch 是否可以详尽无遗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54622196/
我有一个实用函数来在引用中存储不断变化的值: export function useRefOf(value: T) { const ref = useRef(value); useEffect
我是一名优秀的程序员,十分优秀!