Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

227
Views
Can a swift switch be exhaustive for type Double without a default case?

Can a swift switch be exhaustive for type Double without a default case?

This switch (without a default case) gives the error: switch must be exhaustive:

    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
    }

But this switch, with the (useless) default case, works:

    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
    }

I try to avoid default cases with my switches, but don't know if that's possible with a Double.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

No because only enum types can be exhaustively checked.

But in this case, the problem is even deeper. Even if Integers could be exhaustively checked, you still couldn't exhaustively check Double without a where clause. One of the options is .nan ("not a number"), which you're not considering. So you might think to just add that case:

case .nan:
    yAxisMinimum = .nan

Not only won't this make it exhaustive, it won't even work the way you'd expect.

var minY = Double.nan

switch minY {
case -(Double.infinity)..<0.9:
    yAxisMinimum = 0.0
// ...
case .nan:
    yAxisMinimum = .nan
default:
    yAxisMinimum = 0
}

yAxisMinimum // 0

Why? Because of this:

var minY = Double.nan
minY == .nan   // false

NaN is unequal to everything, including NaN. So there's no way to include it directly in a switch statement. You have to use a where clause:

case _ where minY.isNaN:
    yAxisMinimum = .nan

And that's definitely beyond the compiler's ability to validate.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!