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

时间:2017-09-27 15:31:28

标签: swift if-statement

如果调用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
}

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

2 个答案:

答案 0 :(得分: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
        }
    }
}

虽然这段代码更容易用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;
}

或更好,或许:

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

let levelUpCost = levelUpCosts[speedLvl]
if levelUpCost < coins {
    coins -= levelUpCost
    speedLvl += 1
}

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

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

答案 1 :(得分:0)

不,if-else条件将在达到成功条件后继续。

所以,if coins > 19 && speedLvl == 1如果此条件为真,则else-if条件的其余部分甚至不会被检查。

如果第一个if-statement不为真,那么它将转到每个if-else语句,直到达到真实条件。一旦达到真正的if-else条件,它就不会检查任何剩余的if-else条件。

如果您希望检查这些条件中的每一个,请删除其他内容并将其中的每个条件作为独立if-statement单独检查每个条件,而不依赖于其他条件。