J'utilise UIColor pour mapper une valeur dans un dictionnaire, mais je suis tombé sur une chose vraiment étrange. La moitié de mes clés renvoie les bonnes valeurs et l'autre moitié non. Quand je compare les UIColors en utilisant isEqual, ils retournent false, mais le hachage correspond parfaitement.La comparaison des UIColors échoue, mais les hachages sont égaux?
for key in colorToAllocationCurrent.keys {
print("\(key.hash) ---> \(currentColor!.hash)")
print(key.isEqual(currentColor))
}
Ce renvoie les éléments suivants:
144048128 ---> 151431738
false
155123712 ---> 151431738
false
147739933 ---> 151431738
false
151431738 ---> 151431738 <-------- EQUAL?
false
Des idées sur pourquoi cela ne va pas? J'ai vérifié le contenu de l'UIColor, et ils sont identiques.
Lorsque j'imprime la description de la couleur au lieu du hachage, les couleurs redeviennent identiques. La chose étrange est que cela fonctionne sur la moitié des couleurs.
for key in colorToAllocationCurrent.keys {
print("\(key.description) ---> \(currentColor!.description)")
print(key.isEqual(currentColor))
}
UIExtendedSRGBColorSpace 1 0 0 1 ---> UIExtendedSRGBColorSpace 1 0.666667 0 1
false
UIExtendedSRGBColorSpace 1 1 0 1 ---> UIExtendedSRGBColorSpace 1 0.666667 0 1
false
UIExtendedSRGBColorSpace 1 0.333333 0 1 ---> UIExtendedSRGBColorSpace 1 0.666667 0 1
false
UIExtendedSRGBColorSpace 1 0.666667 0 1 ---> UIExtendedSRGBColorSpace 1 0.666667 0 1
false
Les couleurs sont-elles réellement égales? Je ne suis pas sûr mais la fonction d'IsEqual pourrait vérifier les valeurs de couleur et pas le hachage. – Yan
Oui, les couleurs apparaissent égales lorsque je les imprime. – Recusiwe
Dans la mesure où Hashes étant égaux et non l'objet consultez cet article http://nshipster.com/equality/ Il déclare que "Cependant, l'inverse ne tient pas: deux objets ne doivent pas être égaux pour que leurs valeurs de hachage à être égal "Pouvez-vous imprimer les couleurs pour lesquelles isEqual montre faux. – Yan