ios 在Swift中,为什么不会这样?reduce()将所有值相加?仅打印数组中的第一个数字

cclgggtu  于 2023-05-02  发布在  iOS
关注(0)|答案(1)|浏览(147)

我对编程很陌生,我正在开发一个iOS应用程序,我基本上可以输入我的每日提示(在我的工作中),它被添加到每一天(基本上是一个与日历同步的计算器)。现在,我只是想得到多个提示,并加起来得到一个总的。步骤基本上是:1.使用按钮输入小费金额;2.点击“添加今天”;3.屏幕更改为“总计”,其中应显示数组中所有值的总和。
问题是,虽然控制台显示每个新值都添加到数组中,但它们并没有添加在一起,控制台继续简单地打印第一个值。“grand total”似乎也反映了这一点,并且只打印第一个值。任何帮助将是伟大的!我会在下面发布整个代码:

import UIKit

class CalcScreen: UIViewController {
    
    
    @IBOutlet weak var tipAmount: UILabel!
    
    var tipArray: [Int] = []
    
    lazy var tipArrayTotal = tipArray.reduce(0, +)
    
    public var tip: Int = 0
    
    let vc = TipTotalView(nibName: "TipTotalView", bundle: nil)
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
    }
    
    func clearTip() {
        tip = 0
        tipAmount.text = String(tip)
    }
    
    func addToTip (value: Int) {
        tip = tip * 10 + value
        tipAmount.text = String(tip)
        tipArray.append(value)
    }
    
    
    
    @IBAction func zero(_ sender: Any) {
        addToTip(value: 0)
    }
    
    @IBAction func clear(_ sender: Any) {
        clearTip()
    }
    
    @IBAction func one(_ sender: Any) {
        addToTip(value: 1)
    }
    
    @IBAction func two(_ sender: Any) {
        addToTip(value: 2)
    }
    
    @IBAction func three(_ sender: Any) {
        addToTip(value: 3)
    }
    
    @IBAction func four(_ sender: Any) {
        addToTip(value: 4)
    }
    
    @IBAction func five(_ sender: Any) {
        addToTip(value: 5)
    }
    
    @IBAction func six(_ sender: Any) {
        addToTip(value: 6)
    }
    
    @IBAction func seven(_ sender: Any) {
        addToTip(value: 7)
    }
    
    @IBAction func eight(_ sender: Any) {
        addToTip(value: 8)
    }
    
    @IBAction func nine(_ sender: Any) {
        addToTip(value: 9)
    }
    
    
    @IBAction func addToday(_ sender: Any) {
        
        vc.totalTip?.text = String(tipArrayTotal)
        clearTip()
        navigationController?.pushViewController(vc, animated: true)
        print(tipArray)
        print(tipArrayTotal)
        
    }
    
    @IBAction func changeDate(_ sender: Any) {
    }
    
}
kokeuurv

kokeuurv1#

问题是lazy的使用。惰性var是一个存储的属性,它只在第一次访问时计算和存储。这就是为什么它在第一次访问后永远不会改变的原因。
在本例中,您需要一个计算属性。

var tipArrayTotal: Int {
    return tipArray.reduce(0, +)
}

现在,每次访问它时都会计算它。因此,如果在一个方法中多次引用该属性,则应更改代码以调用一次并将其存储在局部变量中,然后在方法的其余部分中引用该变量。

相关问题