2016-11-03 8 views
1

私はUIColorを使って辞書の値にマップしていますが、私は本当に奇妙なことにぶつかりました。キーの半分が正しい値を返し、残りの半分は正しい値を返します。私がisEqualを使用してUIColorsを比較すると、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 
+0

実際に色は同じですか?私はよく分かりませんが、isEqual関数はハッシュではなく色の値をチェックしている可能性があります。 – Yan

+0

そうですね、それらを印刷すると色が同じに見えます。 – Recusiwe

+0

ハッシュが等しく、オブジェクトではない限り、この記事をチェックしてください。http://nshipster.com/equality/「しかし、逆は成立しません。二つのオブジェクトがハッシュ値を等しくする必要はありません。 is equal "isEqualがfalseを示す色を印刷できますか? – Yan

答えて

1

私はこれを行うことを目的とするのはかなりわからないんだけど、あなたはEquatableは、あなたが例えば、==を使用してUIColorインスタンスの等価性を確認する行うことができますことを意味しているUIColorで採択されないことに注意してください。

let col1 = UIColor.red 
let col2 = UIColor.red 

// the output is "matched" 
print(col1 == col2 ? "matched" : "no match") 

let customCol1 = UIColor(colorLiteralRed: 123.0/255.0, green: 243.0/255.0, blue: 46.0/255.0, alpha: 0.9) 
let customCol2 = UIColor(colorLiteralRed: 123.0/255.0, green: 243.0/255.0, blue: 46.0/255.0, alpha: 0.9) 

// the output is "matched" 
print(customCol1 == customCol2 ? "matched" : "no match") 

let customCol3 = UIColor(colorLiteralRed: 123.0/255.0, green: 243.0/255.0, blue: 46.0/255.0, alpha: 0.9) 
let customCol4 = UIColor(colorLiteralRed: 123.0/255.0, green: 243.0/255.0, blue: 46.0/255.0, alpha: 1.0) 

// the output is "no match" 
print(customCol3 == customCol4 ? "matched" : "no match") 

希望しました。

関連する問題