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>'

Antworten auf die Frage(4)

Ihre Antwort auf die Frage