迅速开关可以详尽类型双没有默认情况下?

问题描述 投票:5回答:1

迅速开关可以详尽类型双没有默认情况下?

这个开关(没有默认情况下)给出了错误:开关必须是穷举:

    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
    }

我会尽量避免默认情况下,我的开关,但不知道如果可能的话用双。

swift switch-statement
1个回答
10
投票

联四的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

而这绝对超出编译器的验证能力。

© www.soinside.com 2019 - 2024. All rights reserved.