ker*_*nic 10 arrays swift map-function
我希望能够map在Swift中使用Swift 来修改我的对象数组,而不需要遍历每个元素.
在此之前能够做到这样的事情(这里有更多细节描述:
gnomes = gnomes.map { (var gnome: Gnome) -> Gnome in
gnome.age = 140
return gnome
}
Run Code Online (Sandbox Code Playgroud)
感谢Erica Sadun和其他人,新提案已经完成,我们现在正在摆脱C风格的循环并var在循环中使用.
在我的情况下,我首先得到一个警告,以删除varin然后一个错误我gnome是一个常数(自然)
我的问题是:我们如何更改一个map或新的样式循环中的数组,以便为Swift 3.0做好充分的准备?
vad*_*ian 23
如果要保留该语法,只需使用(可变)临时变量
gnomes = gnomes.map { (gnome: Gnome) -> Gnome in
var mutableGnome = gnome
mutableGnome.age = 140
return mutableGnome
}
Run Code Online (Sandbox Code Playgroud)
dfr*_*fri 14
(下面Gnome是引用类型的情况;类 - 因为你没有向我们展示你如何定义Gnome.对于Gnome作为值类型(结构)的情况,请参阅@vadian:s answer)
删除var不会影响使用.map变异引用类型对象数组的可变成员.即,你可以简单地使用你的旧方法(但是,在闭包签名中省略).var.map
class Gnome {
var age = 42
}
var gnomes = [Gnome(), Gnome(), Gnome()]
gnomes = gnomes.map {
$0.age = 150
return $0
}
/* result */
gnomes.forEach { print($0.age) } // 3x 150
Run Code Online (Sandbox Code Playgroud)
但是,如果您只想修改原始数组而不是将结果分配给.map新数组,则.forEach可能是比较合适的选择.map.
gnomes.forEach { $0.age = 140 }
/* result */
gnomes.forEach { print($0.age) } // 3x 140
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10351 次 |
| 最近记录: |