我在Swift 3(Xcode 8.2.1)中使用泛型,我不明白为什么这不会编译。我也试过self.updateValue
......但也失败了。
extension Dictionary {
mutating func mergeWith<K: Hashable, V: AnyObject> (a: [K:V]) -> [K:V] {
for (k,v) in a {
self[k] = v // compile error: Ambiguous reference to member 'subscript'
}
}
}
我正在尝试将泛型K和V的类型限制为与Dictionary一起使用的类型,但这似乎不起作用?
答案 0 :(得分:3)
这不是一个特别有用的错误,但问题是您在方法中引入了新的本地通用占位符K
和V
- 这些不需要相关以以任何方式到Dictionary
的{{1}}和Key
类型(请记住调用者满足通用占位符,而不是被叫者。
只需删除它们并使用现有的通用占位符Value
和Key
代替,即使用Value
参数。或者更好的是,当你在其自身内部引用它时,利用泛型automatically infers the generic placeholders这一事实,只需将参数键入[Key : Value]
(将解析为Dictionary
)。
Dictionary<Key, Value>
同样extension Dictionary {
mutating func merge(with dict: Dictionary) {
for (key, value) in dict {
self[key] = value
}
}
}
方法通常不返回变异实例,所以我从你的方法中删除了返回类型。