Swift中如何退出while循环并执行else if语句及数组相关逻辑
现有代码问题梳理
- 外层循环仅设置了
health>0的运行条件,累计消灭150名反抗军后不会自动终止,和你预期的逻辑不符 - 内部判断
sprinting的嵌套while循环逻辑冲突:循环入口条件为sprinting > 50,但内部判断分支又包含sprinting < 50的条件,该分支永远不会触发;且sprinting初始值为0,整个嵌套循环根本不会执行 - 你要的150人击杀触发逻辑不需要强制用函数实现,封装成函数只是为了代码更易维护,属于可选项
最佳实现方案
你可以直接在击杀数判断的分支里补充需求逻辑,执行完后直接调用爆能枪选择逻辑即可,完整可运行的修正代码如下:
import UIKit var health = 5 var stormTrooperBlasterReload = false var magazineCaptivity = 0 var rebelsEliminated = 0 var sprinting = 0 var speed = 0 var switchBlaster: String? = "" var inventory: [String] = ["blasterPistol", "blasterRifle", "blasterShotgun"] // 封装爆能枪选择逻辑(可选,也可以直接写在触发分支里) func selectBlaster() -> String? { print("请选择你要使用的爆能枪,输入对应序号:") for (index, blaster) in inventory.enumerated() { print("\(index + 1): \(blaster)") } // 这里模拟用户选择了序号2的爆能步枪,实际开发可替换为用户输入读取逻辑 let userSelectIndex = 1 guard inventory.indices.contains(userSelectIndex) else { return nil } return inventory[userSelectIndex] } while health > 0 { // 击杀数达到150的触发逻辑 if rebelsEliminated == 150 { print("The emperor has rised!") // 修复sprinting逻辑,这里假设你需要先判断冲刺速度 if sprinting < 50 { print("you need to speed up") } else if sprinting >= 50 { print("you are moving fast") } else { print("Sprint!") } // 执行完触发逻辑后调用爆能枪选择 switchBlaster = selectBlaster() if let selected = switchBlaster { print("你已选择武器:\(selected)") } // 终止外层while循环,符合你设定的150击杀后终止的需求 break } if stormTrooperBlasterReload { print("you are reloading, Take cover!") sleep(7) print("reloading almost complete!") sleep(2) print("aiming your blaster") stormTrooperBlasterReload = false magazineCaptivity = 0 } if magazineCaptivity > 50 { stormTrooperBlasterReload = true continue } print("Firing") magazineCaptivity += 1 rebelsEliminated += 1 }
逻辑说明
- 击杀数达到150时会先执行你要的自定义逻辑,随后自动触发爆能枪选择流程,流程结束后直接终止外层循环
- 把武器选择逻辑封装成独立函数,后续要调整选择规则时不需要修改主循环代码,可维护性更高
- 修复了原嵌套while循环的逻辑冲突问题,如果你确实需要嵌套循环控制冲刺逻辑,可以基于现有判断自行调整
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

