Ich versuche, eine Funktion zum tiefen Zusammenführen zweier Wörterbücher zu schreiben. Damit meine ich, dass, wenn die Werte für einen Schlüssel in beiden Wörterbüchern zusammengeführt werden und diese Werte beide Wörterbücher sind, sie zusammengeführt werden, anstatt dass eines durch das andere ersetzt wird.Wie schreibe ich eine generische Swift-Erweiterung, um zwei Wörterbücher zu vertiefen?
Hier ist, was ich habe:
extension Dictionary {
public func deepMerged(with other: [Key: Value]) -> [Key: Value] {
var result: [Key: Value] = self
for (key, value) in other {
if let value = value as? [Key: Value], let existing = result[key] as? [Key: Value] {
result[key] = existing.deepMerged(with: value)
} else {
result[key] = value
}
}
return result
}
}
Aber leider ist es nicht kompilieren. Ich erhalte die Fehler
nicht Wert vom Typ umwandeln kann ‚[Schlüssel: Wert]‘ zu erwarten Argument Typen [_: _]‘auf der Verwendung von Wert in dem rekursiven Aufruf` deepMerged (mit :).
ich in der Lage bin von Scoping die Erweiterung, um dieses Werk:
extension Dictionary where Key == String, Value == Any {
...
}
Dies funktioniert für meinen speziellen Anwendungsfall zu diesem Zeitpunkt, aber ich verstehe nicht, warum der allgemeineren Code doesn‘ t arbeiten.