Swift 提供了一种名为 Bool 的内置类型,用来表示真值:true和false。
Swift 提供了三个逻辑运算符(!、&&和||),用来组合和求值布尔表达式。
&&)与运算符(&&)只有在两个操作数都为true时才返回true。
只要有一个操作数是false,它就返回false。
在&&符号的两侧各放一个表达式或布尔值:
true && true // true
true && false // false
||)或运算符(||)只要至少有一个操作数为true就返回true。
只有当两个操作数都为false时,它才返回false。
在||符号的两侧各放一个表达式或布尔值:
true || true // true
true || false // true
false || false // false
!)非运算符(!)会对布尔值取反。
如果值为false,它就返回true;如果值为true,它就返回false。
把!运算符放在值或表达式的正前方:
!true // false
!false // true
())你可以用括号把表达式分组,从而控制求值顺序。 在 Swift 中,括号内的表达式会先求值:
true && false && false || true // true
true && false && (false || true) // false
用括号分组还会决定非运算符如何作用于复杂表达式:
!true && false // false (evaluates (!true) first, then false && false)
!(true && false) // true (evaluates (true && false) first to false, then !false)
当你需要明确求值顺序,或让复杂条件更容易读懂时,就使用括号。如果默认的优先级已经很清晰,就不要添加多余的括号。
你正在开发一款备受好评的新游戏 Wings Quest。 在游戏中,你是一只四处移动、收集种子的鸟。 玩家拾取所有种子即可获胜。 如果玩家碰到老鹰,就会失去所有种子,并输掉游戏。 这条规则有一个例外:玩家可以拥有一个处于激活状态的强化道具,让自己飞得比其他鸟更高。
你的目标是编写一些将用于这款游戏的规则。
在游戏中,如果鸟在拥有强化道具时碰到老鹰,就会获得奖励分。
定义函数bonusPoints(powerUpActive:touchingEagle:),它接收两个实参:powerUpActive表示鸟是否有处于激活状态的强化道具,touchingEagle表示鸟是否正碰到老鹰。
只有当鸟拥有处于激活状态的强化道具且正碰到老鹰时,函数才应返回true,否则返回false。
bonusPoints(powerUpActive: false, touchingEagle: true)
// Returns false
在游戏中,玩家拾取种子或强化道具时会得分。
定义函数score(touchingPowerUp:touchingSeed:),它接收两个实参:touchingPowerUp表示鸟是否正碰到强化道具,touchingSeed表示鸟是否正碰到种子。
如果鸟正碰到强化道具或种子,函数应返回true,否则返回false。
score(touchingPowerUp: true, touchingSeed: true)
// Returns true
定义函数lose(powerUpActive:touchingEagle:),它接收两个实参:powerUpActive表示鸟是否有处于激活状态的强化道具,touchingEagle表示鸟是否正碰到老鹰。
如果角色正碰到老鹰且没有处于激活状态的强化道具,函数应返回true,否则返回false。
lose(powerUpActive: false, touchingEagle: true)
// Returns true
定义函数win(hasPickedUpAllSeeds:powerUpActive:touchingEagle:),它接收以下实参:
hasPickedUpAllSeeds,表示鸟是否已经拾取了所有种子。powerUpActive,表示鸟是否有处于激活状态的强化道具。touchingEagle,表示鸟是否正碰到老鹰。如果鸟已经收集了所有种子,并且根据第 3 部分中定义的实参判断它没有失败,函数应返回true,否则返回false。
win(hasPickedUpAllSeeds: false, powerUpActive: true, touchingEagle: false)
// Returns false