试图理解结构集合的地图功能

时间:2017-11-10 04:43:22

标签: swift

请有人解释下面的代码,例如我5.我知道它在做什么,在Person类型的结构数组中将所有isLocked Bools更改为true。我只是在讲故事"对我自己的语法。

people = people.map({
        (p) -> Person in
        var mod = p
        mod.isLocked = true
        return mod
})

感谢。

1 个答案:

答案 0 :(得分:3)

map允许您通过对其所有元素应用一些变换闭包来从现有数组中创建一个新数组。不幸的是,在这个例子中,你的闭包返回了它所需的相同元素,所以如果你的Personclass(而不是struct),那么map就是完全没有必要,上面的代码只会做同样的事情:

people.forEach { $0.isLocked = true }

如果Personstruct而不是class,OTOH,则map会有意义,因为您需要制作副本每个对象都要修改它。

对于structmap创建一个新数组,该数组由数组中每个Person结构的副本组成,每个副本都有isLocked属性设置为true

people = people.map {
    (p) -> Person in
    var mod = p // make a copy of each Person, store it in 'mod'
    mod.isLocked = true // change the isLocked property of the copy to true
    return mod // return the modified copy
}