枚举结构数组

时间:2015-08-15 02:46:41

标签: 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' is a 'let' constant" }
array[0].name = "Javert" //work fine.

我试图在循环中更改属性的结构值。

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

哦,我刚刚想到这一点,for item in...刚刚在array内创建了一个实际对象的复制,这意味着它被自动声明为let常量。

这就是为什么我无法改变其属性值。

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

编辑:

感谢@Zoff Dino原来的for index in 0..<array.count个答案。

然而,这只是一个简化的问题。

我要归档的是使用具有结构数组的高阶函数,例如:

array.each { item in ... }.map { item in ... }.sort { } ...

1 个答案:

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