我正在尝试执行以下代码将元组数组转换为字典但我收到编译错误说:
'[String:String]'类型的不可变值只有名为'updateValue'的变异成员
var array = [("key0", "value0"), ("key1", "value1")]
var initial = [String: String]()
var final = array.reduce(initial) { (dictionary, tuple) in
dictionary.updateValue(tuple.0, forKey: tuple.1)
return dictionary
}
为什么 initial 被声明为 var ?是否与 reduce's 签名 @noescape 有关?
func reduce<U>(initial: U, combine: @noescape (U, T) -> U) -> U
3 回答
您可以通过在
var
之前加上dictionary
参数来使其变为可变:但请注意,使用
reduce
会在每次迭代时创建一个新字典,这使得算法效率非常低 . 您可能需要考虑使用传统的foreach
循环Swift 4有一个新变种:
可以表达的是:
在Swift 3上: