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

Swift使用3个UIStepper计算公交票总价 无法合并多票种价格如何解决

问题根源

你当前的代码存在两处核心逻辑错误,导致无法正确计算三类票的总价:

  • 总价计算逻辑错误:没有按「单类票价 * 对应购票数量」的规则累加三类票的价格,而是错误地只要票种数量不为0就只加1次对应票价,再乘以当前触发操作的UIStepper值,完全不符合总价计算规则
  • 按钮状态判断逻辑错误:仅判断当前触发的stepper值是否小于1来控制按钮状态,而非判断三类票总票数是否大于0,会出现总票数不为0但按钮被错误禁用的问题
修正后的完整代码

删除无用的全局totalPrice变量,修改两个更新方法即可:

@IBOutlet weak var seniorsTicketsStepper: UIStepper!
@IBOutlet weak var adultsTicketsStepper: UIStepper!
@IBOutlet weak var teenagersTicketsStepper: UIStepper!
@IBOutlet weak var validateButton: UIButton!

@IBOutlet weak var numOfTickets: UILabel!
@IBOutlet weak var ticketsPrices: UILabel!

@IBAction func seniorsTicketsTapped(_ sender: UIStepper) {
    updateTicketsCount()
    updateTicketsPrices()
}

@IBAction func adultsTicketsTapped(_ sender: UIStepper) {
    updateTicketsCount()
    updateTicketsPrices()
}

@IBAction func teenagersTicketsTapped(_ sender: UIStepper) {
    updateTicketsCount()
    updateTicketsPrices()
}

func updateTicketsCount() {
    // 统一设置三个stepper的最大值,也可以移动到viewDidLoad中仅设置一次
    seniorsTicketsStepper.maximumValue = 10
    adultsTicketsStepper.maximumValue = 10
    teenagersTicketsStepper.maximumValue = 10
    
    let totalCount = Int(seniorsTicketsStepper.value + adultsTicketsStepper.value + teenagersTicketsStepper.value)
    numOfTickets.text = "\(totalCount)"
    
    // 按总票数判断按钮状态
    if totalCount < 1 {
        validateButton.isEnabled = false
        validateButton.backgroundColor = UIColor(red: 170/255, green: 170/255, blue: 170/255, alpha: 1)
    } else {
        validateButton.isEnabled = true
        validateButton.backgroundColor = UIColor(red: 0/255, green: 194/255, blue: 166/255, alpha: 1)
    }
}

func updateTicketsPrices() {
    // 分别计算三类票的总价再累加
    let teenagerTotal = teenagersTicketsStepper.value * 0.75
    let seniorTotal = seniorsTicketsStepper.value * 2.0
    let adultTotal = adultsTicketsStepper.value * 3.0
    let totalPrice = teenagerTotal + seniorTotal + adultTotal
    
    // 格式化价格保留两位小数,避免浮点精度导致的显示异常
    ticketsPrices.text = String(format: "$%.2f", totalPrice)
}
优化说明
  • 删掉了不必要的参数传递和全局变量,每次计算直接读取三个UIStepper的当前值,保证计算准确性
  • 价格计算改为单类票价乘以对应购票数量再累加,完全符合需求
  • 增加价格格式化逻辑,避免出现类似$3.7500000000001的异常展示
  • 按钮状态判断改为基于总票数,逻辑更合理
  • 将颜色创建的分母从250修正为标准的255,颜色显示更准确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:06:04