我有一个结构“Person
”,我想从我声明的amount
中重新分配每个单独对象的structArray
。当我为每个循环执行一次重新分配amount
时,错误说
变异操作符的左侧不可变:'person'是'let'常量
struct Person {
let name : String
var amount : Double
}
var structArray:[Person] = []
func calculateBill(pax: [Person]) -> [Person] {
for person in pax {
person.amount += taxByPerson //error
}
return pax
}
导致问题的原因是什么?我如何解决此问题才能重新分配值?
编辑:谢谢你们指出我的错误在哪里,虽然低调投票令人沮丧地看着大声笑。
func calculateBill(pax: [Person]) -> [Person] {
var finalBill:[Person] = pax
for i in 0..<finalBill.count {
finalBill[i].amount += taxByPerson
}
return finalBill
}
答案 0 :(得分:0)
错误正是它在锡上所说的...... person
是一个let上下文。您需要使用var
。但使用map
struct Person {
var name: String
var amount: Double
}
var people = [Person]()
func calculateBill(_ people: [Person]) -> [Person] {
return people.map{
var p = $0
p.amount += taxByPerson
return p
}
}
答案 1 :(得分:0)
根据定义,值类型可能很痛苦,传递的参数是常量(let
)。
您可以将数组作为inout
参数传递,在函数中直接在数组中添加值:
func calculateBill(pax: inout [Person]) {
for index in 0..<pax.count {
pax[index].amount += taxByPerson
}
}
并将其命名为
calculateBill(pax: &structArray)