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
相关产品推荐
相关产品推荐

