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

Swift 4中如何计算数组所有元素总和?代码报错求解决

正确计算整数数组总和的方法

嘿,我来帮你搞定这个求和问题~

首先得说清楚你原来代码的问题所在:

  • 你的数组arr里存的是普通的整数(Int类型),这些整数根本没有points属性,所以map({$0.points})这一步完全没必要,而且会直接报错。
  • 另外,虽然reduce(0, +)在Swift里是合法的简化写法,但前提是你先正确处理了数组元素——而你这里多了一步错误的map,自然没法得到正确结果。

针对你的整数数组,正确的求和方式有两种:

1. 完整闭包写法(可读性更高)

let arr = [1,2,3,4,5,6,7,8,9,10]
let totalSum = arr.reduce(0) { partialSum, currentNumber in
    partialSum + currentNumber
}

或者进一步简化成 shorthand 形式:

let totalSum = arr.reduce(0) { $0 + $1 }

2. 操作符简写(更简洁)

Swift 允许直接用加法操作符作为reduce的第二个参数,因为它的类型刚好匹配闭包要求:

let totalSum = arr.reduce(0, +)

额外说明:如果你混淆了「自定义对象数组」的情况

如果你的数组里存的是带有points属性的自定义对象(比如下面这种),那原来的map+reduce思路是对的,只是写法需要调整:

// 示例自定义类型
struct ScoreItem {
    let points: Int
}

// 自定义对象数组
let scoreArr = [
    ScoreItem(points:1),
    ScoreItem(points:2),
    ScoreItem(points:3),
    ScoreItem(points:4),
    ScoreItem(points:5),
    ScoreItem(points:6),
    ScoreItem(points:7),
    ScoreItem(points:8),
    ScoreItem(points:9),
    ScoreItem(points:10)
]

// 正确求和:先提取points再累加
let totalPoints = scoreArr.map { $0.points }.reduce(0, +)

// 更高效的写法(避免创建中间数组)
let totalPointsOptimized = scoreArr.reduce(0) { $0 + $1.points }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:27:22