У меня есть 2 словаря:
let foo: [String: Any] = ["name": "John", "isHuman": true, "age": 20]
let bar: [String: Any] = ["name": "Ann", "isHuman": true, "age": 34]
, которые я хотел бы сравнить, исключая при этом определенные ключи из этого сравнения.Ключи, которые я хочу исключить, находятся в другом словаре:
let car: [String: Any] = ["age": 20]
У меня есть это расширение:
extension Dictionary where Key: Equatable {
func isEqualTo(_ dictionary: Dictionary, excluding: [Key] = []) -> Bool {
let left = filter({ !excluding.contains($0.key) })
let right = dictionary.filter({ !excluding.contains($0.key) })
return NSDictionary(dictionary: left).isEqual(to: right)
}
}
, но когда я его вызываю, мне нужно заключить исключенные ключи в Array
, иначе компилятор завершится с ошибкой:
Невозможно преобразовать значение типа 'Dictionary.Keys' в ожидаемый тип аргумента '[String]'
foo.isEqualTo(bar, excluding: Array(car.keys))
работает.
foo.isEqualTo(bar, excluding: car.keys)
приводит к ошибке компилятора.
Могу ли я настроить свое расширение таким образом, чтобы я мог избежать включения исключенных ключей в Array
?