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

Swift中.reduce()无法累加数组所有值?仅输出首个元素问题

问题分析与修复方案

问题1:lazy 属性不会自动更新总和

你定义的 lazy var tipArrayTotal = tipArray.reduce(0, +) 是懒加载属性,它只会在第一次被访问时计算一次总和。之后哪怕 tipArray 里新增了元素,这个变量也不会重新计算,所以你看到数组有新元素,但总和始终是第一次的结果。

问题2:数组存储的是单个数字而非完整小费

你的 addToTip 方法里,每点一个数字键就把单个数字(比如1、5)塞进数组,但实际上你需要的是把每次输入的完整小费金额(比如150)存入数组。现在的逻辑会导致输入15时,数组存[1,5],总和算成6,完全不符合需求。


修复代码

  1. 把 tipArrayTotal 改成计算属性,每次访问都会重新计算数组总和:
// 替换原来的lazy定义
var tipArrayTotal: Int {
    tipArray.reduce(0, +)
}
  1. 调整数组存储逻辑,只在点击addToday时存入完整小费:
func addToTip (value: Int) {
    tip = tip * 10 + value
    tipAmount.text = String(tip)
    // 删掉这行:tipArray.append(value)
}

@IBAction func addToday(_ sender: Any) {
    // 确保输入的小费大于0再存入数组
    if tip > 0 {
        tipArray.append(tip)
    }
    vc.totalTip?.text = String(tipArrayTotal)
    clearTip()
    navigationController?.pushViewController(vc, animated: true)
    print(tipArray)
    print(tipArrayTotal)
}

这样修改后,每次访问tipArrayTotal都会重新计算数组的最新总和,同时数组里存储的是每次输入的完整小费金额,统计结果就会正确了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:08:13