如何在结构中重新分配变量的值?

时间:2017-03-20 18:13:03

标签: swift struct

我有一个结构“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
}

2 个答案:

答案 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)