Ich habe versucht, die folgende Methode zu implementieren, um doppelte Einträge in einem Array von Wörterbüchern durch Vergleichen ihrer spezifischen Schlüssel zu entfernen. Allerdings wird diese Erweiterung Methode nicht aufgrund des Fehlers arbeiten:Erweiterung für Sequenzen von Wörterbüchern, deren Werte gleich sind
Binary operator == cannot be applied to two 'Equatable' operands
Das ist natürlich gleichzusetzen und gleicher Typ (Iterator.Element.Value), also warum es nicht funktioniert?
Ich sehe, dass es Equatable als einen bestimmten Typ, keine Einschränkung behandelt. Ich konnte es nicht mit dem generischen Typ oder dem Schreiben where Iterator.Element == [String: Any], Iterator.Element.Value: Equatable
arbeiten lassen.
Haben Sie irgendwelche Hinweise, wie Sie das lösen können?
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
}
}
Nicht sicher, wie SE-0142 hier helfen würde, ich denke, du meintest [parametrisierte Erweiterungen] (https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md#parameterized-extensions)? :) – Hamish
Ich meine parametrisierte Erweiterungen, aber ich habe SE-0142 vorausgesetzt. Wahrscheinlich falsch gelesen 142. –
Vielen Dank für Ihre Hilfe. Das Problem ist, dass dies alles JSONs sind und ich beide zusammenführen muss - einen lokalen und einen entfernten, die vom Server kommen. Nach dem Zusammenführen wird es in Core Data gespeichert, und es scheint viel zu viel Aufwand zu sein, um einen anderen Strukturtyp zu erstellen, da dies NSManagedObjects sind, so dass ich sie vor dem Einfügen nicht verwenden kann. Im Speicherkontext und Speichern von ihnen alle und Vergleichen schien zu viel für diesen einfachen Zweck auch, also fuhr ich mit Versuchen auf dieser Erweiterung fort. – Suryu