var someDict = [String:Any]()
someDict["foo"] = ["hello"]
(someDict["foo"] as? [String])?.append("goodbye") // error here
我正在尝试将值添加到包含数组的现有字典中。字典还包含其他非数组值,因此它必须具有值类型Any
。问题是,当我这样做时,我收到错误Cannot use mutating member on immutable value of type '[String]'
。一些谷歌搜索出现了一些引用,如this表明字典中的数组总是不可变的,但如果我这样做,编译器不会抱怨:
var someDict = [String:[String]]()
someDict["foo"] = ["hello"]
someDict["foo"]?.append("goodbye")
所以我怀疑信息已经过时,而且它是特定于向下转发的东西。有没有什么方法可以解决这个问题,而无需复制和重新分配整个字典值?
答案 0 :(得分:0)
是的,它与向下转型有关。试试这个:
var someDict = [String:Any]()
someDict["foo"] = ["hello"]
if var arr = someDict["foo"] as? [String] {
arr.append("goodbye")
someDict["foo"] = arr
}