在向下转换后附加到字典中的数组时不可变值错误

时间:2017-04-03 16:44:58

标签: swift

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")

所以我怀疑信息已经过时,而且它是特定于向下转发的东西。有没有什么方法可以解决这个问题,而无需复制和重新分配整个字典值?

1 个答案:

答案 0 :(得分:0)

是的,它与向下转型有关。试试这个:

var someDict = [String:Any]()
someDict["foo"] = ["hello"]
if var arr = someDict["foo"] as? [String] {
    arr.append("goodbye")
    someDict["foo"] = arr
}