Search code examples
swiftswitch-statement

Switch case with range


I'm learning Swift and tried to program the game "Bullseye" from Ryan Wenderlich by my own before watching the videos.

I needed to give the user points depending on how close to the target number he was. I tried to calculate the difference and than check the range and give the user the points, This is what I did with If-else (Couldn't do it with switch case):

private func calculateUserScore() -> Int {
    let diff = abs(randomNumber - Int(bullsEyeSlider.value))
    if diff == 0 {
        return PointsAward.bullseye.rawValue
    } else if diff < 10 {
        return PointsAward.almostBullseye.rawValue
    } else if diff < 30 {
        return PointsAward.close.rawValue
    }
    return 0 // User is not getting points. 
}

Is there a way to do it more elegantly or with Switch-Case? I couldn't just do diff == 0 for example in the case in switch case as xCode give me an error message.


Solution

  • This should work.

    private func calculateUserScore() -> Int {
        let diff = abs(randomNumber - Int(bullsEyeSlider.value))
        switch diff {
        case 0:
            return PointsAward.bullseye.rawValue
        case 1..<10:
            return PointsAward.almostBullseye.rawValue
        case 10..<30:
            return PointsAward.close.rawValue
        default:
            return 0
        }
    }
    

    It's there in the The Swift Programming Language book under Control Flow -> Interval Matching.