Swift嵌套字典更新深层key对应值失败如何在原字典上修改?
问题原因
Swift 中的字典属于值类型,你原有代码的 else if var value = value as? [String: Any] 分支里,拿到的value是上层字典中对应值的拷贝,递归修改的只是这个临时拷贝,没有将修改后的结果回写到上层字典,因此原字典不会有任何变化。
修复方案
只需要在递归修改完子字典后,将子字典重新赋值给上层字典对应的key即可,修改后的函数如下:
func replaceErrorWithCustomError(data: inout [String: Any]) { for (key, value) in data { if key == "key" { data.updateValue("abc", forKey: key) // 如果你需要修改所有层级中名为"key"的值,可删除下面的break break } else if var subDict = value as? [String: Any] { replaceErrorWithCustomError(data: &subDict) // 将修改后的子字典回写到上层字典 data[key] = subDict } } }
调用方式
直接传入你的原字典地址即可完成原地修改:
replaceErrorWithCustomError(data: &fDict)
修改完成后你就可以看到原字典中key对应的值已经被更新为abc,全程不会创建新的顶层字典,所有修改都是在原字典结构上完成的。
内容的提问来源于stack exchange,提问作者Himan Dhawan
相关产品推荐
相关产品推荐

