如果调用if语句并且所有条件都为真,那么还要调用所有其他if语句吗?

luc*_*hsi 2 if-statement swift

如果调用if语句并且所有条件都为真,那么还要调用所有其他if语句吗?

喜欢:

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
}
Run Code Online (Sandbox Code Playgroud)

如果玩家有1000个硬币,那么speedLvl转到4个?

Ale*_*ica 5

不,你可以像这样想象它:

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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然这个代码在Swift 4中更容易编写为:

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;
}
Run Code Online (Sandbox Code Playgroud)

或者更好,或许:

let levelUpCosts = [0, 20, 50, 100]

let levelUpCost = levelUpCosts[speedLvl]
if levelUpCost < coins {
    coins -= levelUpCost
    speedLvl += 1
}
Run Code Online (Sandbox Code Playgroud)

如果你想要一次性完成多个级别的升级,那么你可以做这样的事情:

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
Run Code Online (Sandbox Code Playgroud)