Добавить ограничения для общих параметров в расширении
У меня есть эта функция:
func flatten<Key: Hashable, Value>(dict: Dictionary<Key, Optional<Value>>) -> Dictionary<Key, Value> {
var result = [Key: Value]()
for (key, value) in dict {
guard let value = value else { continue }
result[key] = value
}
return result
}
Как видите, он превращает[Key: Value?]
словарь в[Key: Value]
один (без дополнительного).
Я хотел продлитьDictionary
класс с новым методом только для классов, значение которых являетсяOptional
любого типа, но я не могу добавить ограничения к общим параметрам словаря.
Вот что я попробовал:
extension Dictionary where Value: Optional<Any> {
func flatten() -> [Key: Any] {
var result = [Key: Any]()
for (key, value) in self {
guard let value = value else { continue }
result[key] = value
}
return result
}
}
Но терпит неудачу с ошибкой:
Type 'Value' constrained to non-protocol type 'Optional<Any>'