我们有一个这样的辅助函数:
func + <KeyType, ValueType>(left: [KeyType: ValueType], right: [KeyType: ValueType])
-> [KeyType: ValueType]
{
var map: [KeyType: ValueType] = [:]
for (key, value) in left {
map[key] = value
}
for (key, value) in right {
map[key] = value
}
return map
}
我们用它来轻松地组合两个词典:
let foo = ["fooKey" : "fooValue"]
let bar = ["barKey" : "barValue"]
let combine = foo + bar // ["fooKey": "fooValue", "barKey": "barValue"]
它很有效,因为"fooValue"
和"barValue"
都属于String
类型。但是,以下内容不适用于错误
“二进制运算符+不能应用于[String:String]和[String:Int]”。
let foo = ["fooKey" : "fooValue"]
let bar = ["barKey" : 1]
let combine = foo + bar // Error!!!
是否有办法编写字典辅助函数,以便在值的类型不匹配时,找到它们的父/基类并将其用作返回类型?
从概念上讲,这样的事情:
func + <KeyType, ValueType1:BaseValueType, ValueType2:BaseValueType>(left: [KeyType: ValueType1], right: [KeyType: ValueType2])
-> [KeyType: BaseValueType]
{
var map: [KeyType: BaseValueType] = [:]
for (key, value) in left {
map[key] = value
}
for (key, value) in right {
map[key] = value
}
return map
}
答案 0 :(得分:0)
您可以在结构中使用所有Swift词典键/值必须符合的协议:
func combine(lhs: [AnyHashable: Any], rhs: [AnyHashable: Any]) -> [AnyHashable: Any] {
var dictionary = Dictionary<AnyHashable,Any>()
lhs.forEach {
dictionary[$0.key] = $0.value
}
rhs.forEach {
dictionary[$0.key] = $0.value
}
return dictionary
}