J'ai essayé d'implémenter la méthode suivante pour supprimer les entrées doubles dans un tableau de dictionnaires en comparant leurs clés spécifiques. Cependant, cette méthode d'extension ne fonctionne pas en raison de l'erreur:Extension pour les séquences de dictionnaires où les valeurs sont Equatable
Binary operator == cannot be applied to two 'Equatable' operands
Ce sont évidemment même type et assimilables (Iterator.Element.Value), alors pourquoi ça ne marche pas? Je vois qu'il traite Equatable comme un type spécifique, pas une contrainte. Je ne pouvais pas le faire fonctionner avec un type générique ou en écrivant where Iterator.Element == [String: Any], Iterator.Element.Value: Equatable
.
Est-ce que vous avez des indices pour résoudre ce problème?
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
}
}
Vous ne savez pas comment SE-0142 aiderait ici, je pense que vous vouliez dire [extensions paramétrées] (https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md#parameterized-extensions)? :) – Hamish
Je veux dire extensions paramétrées, mais je pensais que SE-0142 fourni. Probablement mal interprété 142. –
Nous vous remercions de votre aide. Le problème est que ce sont tous des JSON et j'ai besoin de fusionner les deux de chacun - un local et un distant, qui vient du serveur. Après la fusion, il est sauvegardé dans les données de base, et il semble que beaucoup de travail excessif pour créer un autre type de structure, puisque ce sont des NSManagedObjects, donc je ne peux pas les utiliser avant de les insérer. Dans le contexte de la mémoire et de les stocker tous et comparer semblait trop pour ce simple objectif aussi, alors j'ai continué avec des tentatives sur cette extension. – Suryu