为什么我不能转换混合类型字典的值并更新值?

时间:2015-06-10 20:09:40

标签: swift dictionary

我试图回答另一个StackOverflow问题,发现我对Swift缺乏了解。

下面是游乐场代码,演示了我遇到的问题。

import Foundation

// How do I access the value of dictionary and update the value, without replacing it?
// How do I make the inner dictionary mutable?

var sampleDict = [
    "dictionary" : [String: String](),
    "array" : [String]()
]


(sampleDict["dictionary"] as! [String:String]).updateValue("avalue", forKey: "akey")
// ERROR: Swift.playground:12:27: error: immutable value of type '[String : String]' only has mutating members named 'updateValue'
//(sampleDict["dictionary"] as! [String:String]).updateValue("avalue", forKey: "akey")

(sampleDict["dictionary"] as! [String:String])["akey"] = "avalue"
// ERROR: Swift.playground:14:56: error: cannot assign to the result of this expression
// (sampleDict["dictionary"] as! [String:String])["akey"] = "avalue"

我的问题是

  • 如何访问mixedType字典的值并更新该值而不替换它?
  • 如何使内部字典变得可变?
  • 这根本不可能吗?

1 个答案:

答案 0 :(得分:1)

我认为这是不可能的。在查看var levelTwoPermutationObjects = Enumerable.Range(0, 4) .Select(arg => new permutationObject { element = number }) .ToList(); Parallel.ForEach(levelTwoPermutationObjects, permutationObject => permutationObject.DoThings()); 声明时,似乎没有方法来更改值,只替换它。这有点意义,因为当你得到一个值时,它会返回字典中真实结构的副本(结构总是被复制)。当然,在使用课程时它会起作用。这是我的理论..

编辑:我刚刚发现它在没有强制转换为[String:String]和一个类型正确的字典的情况下工作:

Dictionary