我有一个嵌套字典,其中深节点是一个数组。当我尝试将一个元素附加到字典的数组元素时,我得到一个编译错误。我想要的是替换
[“000”:“OK”]
如果密钥是相同的“000”,或者如果密钥不同,则附加到现有元素,例如
[“001”:“好”]
。感谢一些指导或替代方法来更新。我得到的错误是:
不能对类型'[String:]的不可变值使用变异成员 字符串]]'
B = [ "EA" : [ "status": [["000": "OK"]]]]
B["EA"]?["status"] = [["000": "NOT OK"]]
print(B)
(B["EA"]?["status"])?.append(["001":"Good"])
答案 0 :(得分:1)
你这样做就像超人穿上裤子一样 - 一次一条腿。拔出阵列,贴在上面,再把它放回去:
var B = [ "EA" : [ "status": [["000": "OK"]]]]
B["EA"]?["status"] = [["000": "NOT OK"]]
print(B) // ["EA": ["status": [["000": "NOT OK"]]]]
if var arr = B["EA"]?["status"] {
arr.append(["001":"Good"])
B["EA"]?["status"] = arr
}
print(B) // ["EA": ["status": [["000": "NOT OK"], ["001": "Good"]]]]
答案 1 :(得分:1)
因为Swift中的字典和数组都是结构类型 你可以将B的类型显式化。喜欢:
var B:[String:[String:NSMutableArray]] = [ "EA" : [ "status": [["000": "OK"]]]]
B["EA"]?["status"] = [["000": "NOT OK"]]
print(B)
//["EA": ["status":{
// 000 = "NOT OK";
// }
// ]]
然后你可以使用NSMutableArray方法add()
(B["EA"]?["status"])?.add(["001":"Good"])
print(B)
//["EA": ["status":{
// 000 = "NOT OK";
// },
// {
// 001 = Good;
// }
// ]]