我有两个字典:
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
中?
func isEqualTo(_ dictionary: Dictionary, excluding: Dictionary.Keys) -> Bool
这个怎么样? - Alladinian