You need to enable JavaScript to run this app. Swift UIAlert添加交互功能及进度条数值匹配异常问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Swift UIAlert添加交互功能及进度条数值匹配异常问题求助

问题根源排查
  • 核心错误:nenuSurvivalButton 函数中存在一行逻辑完全错误的进度赋值代码 nenuProgress.progress += Float(xpGained)。UIProgressView的progress属性取值范围为0~1,直接累加整数型的xpGained会导致进度值超出上限被系统自动截断为1,重复点击就会出现进度冻结的现象。
  • 进度更新顺序错误:nenuSurvivalButton 中先计算旧XP对应的进度赋值,再修改XP值,多余的错误赋值操作覆盖了正确的计算结果,直接导致两个按钮的进度联动异常,也就是你遇到的「先点Alert再点进度按钮增量不对、甚至进度回退」的问题。
  • 潜在稳定性问题:依赖UILabel的text值判断当前等级、两个按钮的升级逻辑重复冗余,后续迭代容易再出问题。
修复方案

直接替换nenuSurvivalButton的实现即可,删除错误代码,逻辑和普通进度按钮对齐:

func nenuSurvivalButton() {
    // 先更新XP,再计算进度,和普通按钮逻辑统一
    xpGained += 5
    let percentageProgress = Float(xpGained) / Float(toNextLevel)
    
    if xpGained < toNextLevel + 1 {
        // 直接赋值正确的百分比,不需要额外累加
        nenuProgress.progress = percentageProgress
        print(percentageProgress)
    } else {
        // 升级逻辑和原有逻辑保持一致即可,可根据需求调整升级后初始XP
        nenuProgress.progress = 0.0
        xpGained -= toNextLevel
        switch nenuLevel.text {
        case "1":
            toNextLevel += 3
            nenuLevel.text = "2"
        case "2":
            xpGained = 5
            toNextLevel += 3
            nenuLevel.text = "3"
        case "3":
            xpGained = 5
            toNextLevel += 3
            nenuLevel.text = "4"
        case "4":
            xpGained = 5
            toNextLevel += 3
            nenuLevel.text = "5"
        case "5":
            xpGained = 5
            toNextLevel += 3
            nenuLevel.text = "6"
        case "6":
            xpGained = 1
            toNextLevel += 3
            nenuLevel.text = "7"
        case "7":
            xpGained = 1
            toNextLevel += 3
            nenuLevel.text = "8"
        case "8":
            xpGained = 1
            toNextLevel += 3
            nenuLevel.text = "9"
        case "9":
            xpGained = 1
            toNextLevel += 3
            nenuLevel.text = "10"
        default:
            print("Something went wrong")
        }
    }
}
优化建议
  • 把升级逻辑抽成单独的公共方法,两个按钮共用,避免重复代码出错
  • 单独声明var currentLevel: Int = 1属性存储等级,不要读取UI控件的text值做逻辑判断,稳定性更高
  • 升级所需的toNextLevel可以直接用公式计算,比如toNextLevel = 10 + 3 * (currentLevel - 1),不需要写十多个switch分支,简化代码

内容的提问来源于stack exchange,提问作者TristamLearner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 17:24:02