合并具有多个类型或任何/任何对象类型的词典

时间:2014-11-06 16:04:55

标签: dictionary swift

我有这个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类型一起使用?

1 个答案:

答案 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"])

KeyValueDictionary类型中的类型别名,映射到特定实例的特定键值和值类型。