Я попытался реализовать следующий метод для удаления двойных записей в массиве словарей путем сравнения их конкретных ключей. Однако этот метод расширения не будет работать из-за ошибки:
Двоичный оператор == не может быть применен к двум операндам Equatable
Очевидно, что они равны и имеют один и тот же тип (Iterator.Element.Value), так почему же это не работает?
Я вижу, что он рассматривает Equatable как определенный тип, а не как ограничение. Я не мог заставить его работать с универсальным типом или написав where Iterator.Element == [String: Any], Iterator.Element.Value: Equatable
.
У вас есть какие-нибудь идеи о том, как решить эту проблему?
extension Sequence where Iterator.Element == [String: Equatable] {
public func removeDoubles(byKey uniqueKey: String) -> [Iterator.Element] {
var uniqueValues: [Iterator.Element.Value] = []
var noDoubles: [Iterator.Element] = []
for item in self {
if let itemValue = item[uniqueKey] {
if (uniqueValues.contains { element in
return itemValue == element
}) {
uniqueValues.append(itemValue)
noDoubles.append(item)
}
}
}
return noDoubles
}
}