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{ ... }