You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:18:04