我有这个Swift代码用于合并两个字典:
extension Dictionary {
mutating func extend(newVals: Dictionary <String, Any>) {
for (key,value) in newVals {
self.updateValue(value, forKey:key)
}
}
}
包含.updateValue( , forKey:)
的行会生成以下错误:
'protocol<>' is not convertible to 'Value'
之前我将newVals
作为Dictionary <String, String>
并且工作正常,所以我的猜测是问题是由使用Any
引起的。
我的问题是我正在使用混合了String
s和Int
s的字典(以及之后可能还有其他类型的值)。
是否仍然可以让此extend
函数与Any
类型一起使用?
答案 0 :(得分:2)
您实际上并不需要(并且不能)在函数声明中指定Any
类型 - 您需要使newValues
字典的子类型与其扩展的字典匹配:
extension Dictionary {
mutating func extend(newVals: Dictionary) {
for (key,value) in newVals {
self.updateValue(value, forKey:key)
}
}
}
var dict = ["one": 1, "two": 2, "hello": "goodbye"]
dict.extend(["three": 3])
dict.extend(["foo": "bar"])
Key
和Value
是Dictionary
类型中的类型别名,映射到特定实例的特定键值和值类型。