You need to enable JavaScript to run this app. 如何在Xcode项目中添加数值累加功能,实现输入值累计展示
优惠活动
大模型
产品
解决方案
定价
更多

如何在Xcode项目中添加数值累加功能,实现输入值累计展示

数值累加功能修改方案

核心问题:现有代码每次传递新的输入值时直接覆盖了Label的展示内容,没有保留历史输入的累加结果,我们需要新增属性持久化存储累加总和。

推荐适配方案(兼容所有跳转场景)

将累加总和存储在第一个ViewController中,避免第二个页面销毁导致数据丢失,修改代码如下:

1. 修改ViewController.swift

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {
    
    @IBOutlet weak var amountSpent: UITextField!
    // 新增属性存储所有输入的累加总和
    private var totalSum: Double = 0
    
    override func viewDidLoad() {
        super.viewDidLoad()
        amountSpent.delegate = self
        amountSpent.keyboardType = .numberPad
    }
    
    private func amountSpent(_ amountSpent: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        let invalidCharacters = CharacterSet(charactersIn: "0123456789").inverted
        return string.rangeOfCharacter(from: invalidCharacters) == nil
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // 新增安全校验,避免空输入、类型转换失败导致的崩溃
        guard let resultViewController = segue.destination as? ResultViewController,
              let inputText = amountSpent.text,
              !inputText.isEmpty,
              let inputNum = Double(inputText) else {
            return
        }
        // 先在当前页面完成累加
        totalSum += inputNum
        // 将最终累加结果传给第二个页面
        resultViewController.finalTotal = totalSum
        // 跳转后清空输入框,方便用户下次输入
        amountSpent.text = ""
    }
    
    @IBAction func buttonPressed(_ sender: Any) {
        self.performSegue(withIdentifier: "goToResult", sender: nil)
    }
}

2. 修改ResultViewController.swift

import UIKit

class ResultViewController: UIViewController {
    @IBOutlet weak var totalAmount: UILabel!
    // 接收第一个页面传过来的累加完成的总和
    var finalTotal: Double = 0
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // 转成字符串展示,如需保留两位小数可将%.0f改为%.2f
        totalAmount.text = String(format: "%.0f", finalTotal)
    }
}

其他说明

  • 上述代码已经做了异常输入兼容,空输入、非数字输入都不会触发累加逻辑,不会崩溃
  • 如果需要展示小数,只需要调整String(format:)中的格式符即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 18:18:02