通用字典扩展错误 - 对下标

时间:2017-03-07 16:08:48

标签: swift generics

我在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一起使用的类型,但这似乎不起作用?

1 个答案:

答案 0 :(得分:3)

这不是一个特别有用的错误,但问题是您在方法中引入了新的本地通用占位符KV - 这些不需要相关以以任何方式Dictionary的{​​{1}}和Key类型(请记住调用者满足通用占位符,而不是被叫者。

只需删除它们并使用现有的通用占位符ValueKey代替,即使用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 } } } 方法通常不返回变异实例,所以我从你的方法中删除了返回类型。