假设我们有一个数组字典:
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)
^ ~~~~~~