如果调用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?
答案 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
单独检查每个条件,而不依赖于其他条件。