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

Swift点击器游戏购买系统负数异常求助:输入框逻辑问题

解决点击器游戏中资源负数增长的问题

嘿,我一眼就瞅出你代码里的几个关键问题,正是它们导致资源变成负数甚至无限负增长。咱们一步步来修复:

1. 最致命的笔误:判断条件和扣除数值不匹配

你代码里写的判断是tidePods >= ppcOrder*5,但实际扣除的却是ppcOrder*50——这就意味着,只要你的tidePods大于等于ppcOrder*5,就会执行扣除50*ppcOrder的操作,资源直接就不够了,自然变成负数。把判断里的5改成50就能解决这个核心问题!

2. 强制解包的风险:输入无效直接崩溃

Int(podsPerClickOrder.text!)!这里连续两个强制解包,要是用户输入的是空字符串、字母或者其他非数字内容,你的App直接就崩了。而且如果用户输入负数,ppcOrder会变成负数,这时候tidePods -= ppcOrder*50相当于增加资源,逻辑完全混乱。

3. 修复后的完整代码

我把所有问题都修正了,还加了安全校验和用户友好的处理:

var intNumber : Int = 0
@IBOutlet weak var podsPerClickOrder: UITextField!
@IBOutlet weak var tidePodScore: UILabel!

var tidePods: Int = 0 // 假设你已经初始化了这个资源变量
var podsPerClick: Int = 0

@IBAction func orderButton(_ sender: Any) {
    // 安全解析输入:确保输入是正整数,避免崩溃和恶意输入
    guard let inputText = podsPerClickOrder.text, 
          let ppcOrder = Int(inputText), 
          ppcOrder > 0 else {
        // 输入无效,清空输入框并退出
        podsPerClickOrder.text = ""
        print("请输入有效的正整数!")
        return
    }
    
    // 清空输入框
    podsPerClickOrder.text = ""
    
    // 计算总花费,判断资源是否足够
    let totalCost = ppcOrder * 50
    if tidePods >= totalCost {
        tidePods -= totalCost
        podsPerClick += ppcOrder
        // 更新UI显示最新数值
        tidePodScore.text = "\(tidePods)"
        // 如果你有显示podsPerClick的Label,记得也更新它
        // podsPerClickLabel.text = "\(podsPerClick)"
    } else {
        // 资源不足时的提示(可选,也可以用弹窗提示用户)
        print("资源不够买这么多单位哦!")
    }
}

关键修复点说明

  • 安全输入校验:用guard语句确保输入是有效的正整数,既避免崩溃,又防止用户输入负数搞乱逻辑
  • 修正花费判断:总花费和判断条件统一用ppcOrder*50,确保只有资源足够时才执行购买
  • 用户反馈:增加了输入无效和资源不足的提示,提升用户体验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:32:06