arrays – Array.reduce不能通过下标分配:’x’是’let’常量
发布时间:2020-12-14 04:48:42 所属栏目:百科 来源:网络整理
导读:我正在尝试在数组上使用reduce函数: var fields = ["gender","name","nickname"]var stats = fields.reduce([String:String]()) { (res,field) - [String:String] in res[field] = json[field] ?? "" return res} 它只是通过fields数组并将值从json对象分配
我正在尝试在数组上使用reduce函数:
var fields = ["gender","name","nickname"] var stats = fields.reduce([String:String]()) { (res,field) -> [String:String] in res[field] = json[field] ?? "" return res } 它只是通过fields数组并将值从json对象分配给res. 对我来说似乎很简单,但编译器一直说:
在线上: res[field] = json[field] ?? "" 这对我没有任何意义,因为我从未指定res或stats为let. 解决方法
闭包参数(除非用inout声明)是隐式常量,就像用let声明一样.
如果你想修改它,那么你必须先制作可变副本: let stats = fields.reduce([String:String]()) { (res,field) -> [String:String] in var res = res res[field] = json[field] ?? "" return res } 从Swift 4开始,您可以使用 let stats = fields.reduce(into: [String:String]()) { (res,field) in res[field] = json[field] ?? "" } 这里res是一个“inout”参数,可以在闭包中进行变异. 另见SE-0171 Reduce with inout. 一个不同的Swift 4解决方案是创建一个新的字典 let stats = Dictionary(uniqueKeysWithValues: fields.map { ($0,json[$0] ?? "") }) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |