Beschränkungen zu generischen Parametern in der Erweiterung hinzufügen
Ich habe diese Funktion:
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
}
ie Sie sehen können, verwandelt es ein[Key: Value?]
Wörterbuch in ein[Key: Value]
eins (ohne das optionale).
Ich wollte das @ verlängeDictionary
class mit einer neuen Methode nur für Klassen, deren Wert ein @ iOptional
von jedem Typ, aber ich kann den generischen Parametern des Wörterbuchs keine Einschränkungen hinzufügen.
Das ist, was ich versucht habe:
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
}
}
Aber scheitert mit Fehler:
Type 'Value' constrained to non-protocol type 'Optional<Any>'