Нет , поскольку только типы перечислений могут быть тщательно проверены .
Но в этом случае проблема еще глубже.Даже если бы целые числа могли быть исчерпывающе проверены, вы все же не могли бы исчерпывающе проверить Double без предложения 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
Зачем?Из-за этого:
var minY = Double.nan
minY == .nan // false
NaN не равно всему , включая NaN.Таким образом, нет способа включить его непосредственно в оператор switch.Вы должны использовать предложение where
:
case _ where minY.isNaN:
yAxisMinimum = .nan
И это определенно сверх способности компилятора проверять.