Мы имеем вспомогательную функцию, которая, как это:Swift Ограничения Тип базового класса
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
. Однако с ошибкой не работает
«Двоичный оператор + нельзя применить к [Строка: Строка] и [Строка: 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
}
использования 3 родовое параметры: один для левого типа, один для правильного типа, с ограничением, что левое и правое являются подклассом третьего – Alexander