我对编程很陌生,我正在开发一个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) {
}
}
1条答案
按热度按时间kokeuurv1#
问题是
lazy
的使用。惰性var是一个存储的属性,它只在第一次访问时计算和存储。这就是为什么它在第一次访问后永远不会改变的原因。在本例中,您需要一个计算属性。
现在,每次访问它时都会计算它。因此,如果在一个方法中多次引用该属性,则应更改代码以调用一次并将其存储在局部变量中,然后在方法的其余部分中引用该变量。