Adicionar restrições aos parâmetros genéricos na extensão
Eu tenho esta função:
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
}
Como você pode ver, ele transforma um[Key: Value?]
dicionário em um[Key: Value]
um (sem o opcional).
Eu queria estender aDictionary
classe com um novo método apenas para classes cujo valor é umOptional
de qualquer tipo, mas não consigo adicionar restrições aos parâmetros genéricos do dicionário.
Isto é o que eu tentei:
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
}
}
Mas falha com o erro:
Type 'Value' constrained to non-protocol type 'Optional<Any>'