Я использую UIColor для сопоставления со значением в словаре, но я натолкнулся на действительно странную вещь. Половина моих ключей возвращает правильные значения, а другая половина - нет. Когда я сравниваю UIColors с использованием isEqual, они возвращают false, но хэш соответствует только штрафу.Сравнение UIColors не удается, но хеши равны?
for key in colorToAllocationCurrent.keys {
print("\(key.hash) ---> \(currentColor!.hash)")
print(key.isEqual(currentColor))
}
Это возвращает следующие:
144048128 ---> 151431738
false
155123712 ---> 151431738
false
147739933 ---> 151431738
false
151431738 ---> 151431738 <-------- EQUAL?
false
Любые идеи о том, почему это идет не так? Я проверял содержимое UIColor, и они одинаковы.
Когда я печатаю описание цвета вместо хеша, цвета снова отображаются одинаково. Странно, что он работает на половину цветов.
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
Являются ли цветы на самом деле равными? Я не уверен, но функция isEqual может проверять значения цвета, а не хэш. – Yan
Да, цвета отображаются одинаково, когда я распечатываю их. – Recusiwe
Насколько хэши равны, а не объект, проверьте эту статью http://nshipster.com/equality/ В ней указано, что «Однако обратное не выполняется: два объекта не обязательно должны быть равны, чтобы их хэш-значения быть равным »Можете ли вы распечатать цвета, для которых isEqual показывает false. – Yan