看看这段代码:
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
,但效果很好。但是,我不明白为什么item
是le
。
哦,我刚刚想到这一点,for item in...
刚刚在array
内创建了一个实际对象的复制,这意味着它被自动声明为let
常量。
这就是为什么我无法改变其属性值。
我的问题是,除了将Person
更改为class
之外,如何在循环中更改Person
的属性?
编辑:
感谢@Zoff Dino原来的for index in 0..<array.count
个答案。
然而,这只是一个简化的问题。
我要归档的是使用具有结构数组的高阶函数,例如:
array.each { item in ... }.map { item in ... }.sort { } ...
答案 0 :(得分:3)
旧学校for i in ...
将完成这项工作:
for i in 0..<array.count {
array[i].name = "..."
}
编辑:您说的更高阶功能?这将根据age
:
var newArray = array.map {
Person(name: "Someone", age: $0.age)
}.sort {
$0.age > $1.age
}
print(newArray)