通过自定义访问器方法在Swift Dictionary中变换嵌套数组

时间:2015-03-21 14:03:10

标签: swift generics

假设我们有一个数组字典:

var dict: [Int: [Int]] = [:]

Dictionary的下标方法有什么特别之处吗?有人可以解释为什么以下就地附加有效:

dict[1] = [] 
dict[1]?.append(200)
// dict is now [1: [200]] 

但是以下没有:

var xs = dict[1]
xs?.append(300)
// dict is still [1: [200]], not [1: [200, 300]]

我(有点)理解后者为什么不更新原始字典,因为它创建了数组的副本。但我不明白为什么第一个有效,我会认为它同样会创建一个副本。

更多(这是我遇到的实际问题),我可以实现一个允许类似的就地更新行为的方法吗?以下代码不起作用:

extension Dictionary { 
    func mget(key: Key) -> Value? { 
        return self[key]
    } 
}
dict.mget(1)?.append(400) 

它会产生以下错误:

49> d.mget(1)?.append(400)
repl.swift:49:12: error: immutable value of type '[Int]' only 
                  has mutating members named 'append' 
                  d.mget(1)?.append(400)
                           ^ ~~~~~~

0 个答案:

没有答案