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

Swift报错:可变运算符左侧不可变,'gpa'是let常量

解决Swift中"Left side of mutating operator isn't mutable"错误

嘿,我来帮你搞定这个Swift的错误!先给你拆解一下问题出在哪,再给你修正后的代码和优化建议。

错误根源分析

你遇到的报错Left side of mutating operator isn't mutable: 'gpa' is a 'let' constant,核心原因有两个:

  • 首先,for gpa in gpaValues循环里的gpa是不可变常量(Swift的for-in循环默认给每个元素绑定一个let常量),你试图用+=修改它,这当然不允许啦。
  • 其次,你的累加逻辑完全搞反了:我们的目标是把每个gpa的值加到totalGradePoints这个总和变量上,而不是反过来去修改gpa,而且循环里定义averageGPA也不合理——平均GPA应该是循环结束后用总和除以数组长度来计算。

修正后的代码

下面是调整后的正确代码,我加了注释帮你理解:

// 初始化总和变量,默认值0.0
var totalGradePoints = Double()
// 假设你的gpaValues是一个Double类型的数组,这里给个示例值
let gpaValues: [Double] = [3.2, 4.0, 3.7, 3.5]

// 遍历数组,把每个gpa加到总和里
for gpa in gpaValues {
    totalGradePoints += gpa
}

// 循环结束后计算平均GPA(注意要把数组长度转成Double,避免整数除法)
let averageGPA = totalGradePoints / Double(gpaValues.count)

// 打印结果验证
print("总绩点:\(totalGradePoints),平均GPA:\(averageGPA)")

更简洁的写法(高阶函数优化)

Swift里有个非常好用的高阶函数reduce,可以一行搞定总和计算,代码更简洁易读:

let gpaValues: [Double] = [3.2, 4.0, 3.7, 3.5]
let totalGradePoints = gpaValues.reduce(0.0, +) // 初始值0.0,累加每个元素
let averageGPA = totalGradePoints / Double(gpaValues.count)

print("总绩点:\(totalGradePoints),平均GPA:\(averageGPA)")

这样既避免了手动循环可能出错的地方,代码也更符合Swift的风格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:04:49