No, and you can visualize it like this:
if coins > 19 && speedLvl == 1 {
speedLvl = 2
coins = coins - 20
}
else {
if coins > 49 && speedLvl == 2 {
speedLvl = 3
coins = coins - 50
}
else {
if coins > 99 && speedLvl == 3 {
speedLvl = 4
coins = coins - 100
}
}
}
Although this code would be more easily written in Swift 4 as:
switch (speedLvl, coins) {
case (1, 20..<50):
speedLvl += 1
coins -= 20
case (2, 50..<100):
speedLvl += 1
coins -= 50
case (3, 100...):
speedLvl += 1
coins -= 100
default: break;
}
or better yet, perhaps:
let levelUpCosts = [0, 20, 50, 100]
let levelUpCost = levelUpCosts[speedLvl]
if levelUpCost < coins {
coins -= levelUpCost
speedLvl += 1
}
If you want to multiple level ups to be possible, all in one shot, then you can do something like this:
let levelUpCosts = [0, 20, 50, 100]
var affordedLevelUpsCost = 0
let affordedLevelUps = levelUpCosts.lazy.prefix(while: { cost in
let newCost = affordedLevelUpsCost + cost
let canAffordLevelUp = newCost < coins
if canAffordLevelUp { affordedLevelUpsCost = newCost }
return canAffordLevelUp
})
speedLvl += affordedLevelUps.count
coins -= affordedLevelUpsCost