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

