gpt4 book ai didi

swift - 对于没有默认情况的 Double 类型,swift switch 是否可以详尽无遗?

转载 作者:搜寻专家 更新时间:2023-10-30 22:07:15 24 4
gpt4 key购买 nike

对于没有默认大小写的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com