Swift 通过结构数组枚举

Swift 通过结构数组枚举,swift,swift2,Swift,Swift2,请看下面的代码: struct Person { var name: String var age: Int } var array = [Person(name: "John", age: 10), Person(name: "Apple", age: 20), Person(name: "Seed", age: 30)] //for item in array { item.name = "error: cannot assign to property: 'item'

请看下面的代码:

struct Person {
    var name: String
    var age: Int
}

var array = [Person(name: "John", age: 10), Person(name: "Apple", age: 20), Person(name: "Seed", age: 30)]

//for item in array { item.name = "error: cannot assign to property: 'item' is a 'let' constant" }
array[0].name = "Javert" //work fine.
我试图更改循环中结构的属性值

当然,我可以将
Person
更改为
class
,效果很好。但是,我不明白为什么
le

哦,我刚刚发现,
对于…
中的项,刚刚在
数组中创建了一个实际对象的副本,这意味着它会自动声明为
let
常量

这就是为什么我不能改变它的属性值

我的问题是,除了将
Person
更改为
class
,我如何在循环中更改
Person
的属性


编辑:


感谢@Zoff Dino将原始的
用于0中的索引。旧的
for i in…
将很好地完成这项工作:

for i in 0..<array.count {
    array[i].name = "..."
}

如果您只想更改元素的某些属性,可以使用
map
并返回其变异副本:

array.map{ person -> Person in
    var tempPerson = person
    tempPerson.name = "name"
    return tempPerson
}.sort{ ... }

是的,谢谢,我忘了:D,但这只是一个简单的问题。我想归档的是使用结构数组的高阶函数,比如:
array.each{item in…}.map{item in…}.sort{}…
@PhamHoan考虑到性能,我应该非常高效,因为结构/值类型可以非常快地复制。一个稍微更有效的版本是在索引上进行
for in
循环,并直接对元素进行变异,因为不需要创建额外的数组。所以对于小型数组,我不会考虑太多的性能。我已经更新了我的解决方案。原因是Swift 2.2不允许
var
参数。
array.map{ person -> Person in
    var tempPerson = person
    tempPerson.name = "name"
    return tempPerson
}.sort{ ... }