2016-11-08 54 views
3

這一定是以前曾問過的,但我找不到合適的參考。我發現這個question,但是比較三個數字。比較2 UIColor(s)

我想比較2個UIColor以避免重複。每種顏色在r,g,b,alpha中被引用。我形成了顏色,所以我可以控制數字格式。

什麼是適當的方式來處理這個問題?

所有幫助表示讚賞。

+0

所以,你要知道,如果2種顏色的一樣? –

+0

比較顏色並不是一項簡單的任務,你想通過它們的RGBA值來比較它們嗎? – fpg1503

+1

@appzYourLife,@ fpg1503如果我沒有記錯,'UIColor'是'Equatable' – user28434

回答

3

如果您以同樣的方式創建所有顏色,則可以使用==

如果你的顏色是不同的色彩空間,你只是想比較它們的RGBA值使用以下命令:

extension UIColor { 
    func equals(_ rhs: UIColor) -> Bool { 
     var lhsR: CGFloat = 0 
     var lhsG: CGFloat = 0 
     var lhsB: CGFloat = 0 
     var lhsA: CGFloat = 0 
     self.getRed(&lhsR, green: &lhsG, blue: &lhsB, alpha: &lhsA) 

     var rhsR: CGFloat = 0 
     var rhsG: CGFloat = 0 
     var rhsB: CGFloat = 0 
     var rhsA: CGFloat = 0 
     rhs.getRed(&rhsR, green: &rhsG, blue: &rhsB, alpha: &rhsA) 

     return lhsR == rhsR && 
       lhsG == rhsG && 
       lhsB == rhsB && 
       lhsA == rhsA 
    } 
} 

例如:

let white1 = UIColor.white 
let white2 = UIColor(colorLiteralRed: 1, green: 1, blue: 1, alpha: 1) 
white1 == white2 //false 
white1.cgColor == white2.cgColor //false 
white1.equals(white2) //true 
+1

非常好的答案 –

+1

它完美的工作。萬分感謝 –

0

如果初始化爲的UIColor,你應該能夠顏色相互比較容易:

import UIKit 

let myFirstColor = UIColor.red 
let mySecondColor = UIColor.red 
let myThirdColor = UIColor(colorLiteralRed: 1.0, green: 0.0, blue: 0.0, alpha: 1.0) 
let iosWhite = UIColor.white 
let myWhite = UIColor(white: 1.0, alpha: 1.0) 

myFirstColor == mySecondColor //True 
myFirstColor == myThirdColor //True 
iosWhite == myWhite // True 

從評論,有邊緣情況。我想這些都是gray s blackwhiteclear。爲了彌補,你可以創建自己的grays,並比較其:

let myOtherWhite = UIColor(colorLiteralRed: 1.0, green: 1.0, blue: 1.0, alpha: 1.0) 

這是不等於UIColor.white

這就是說,它是很容易找到的操場邊上情況: enter image description here

+1

不適用於'UIColor.white'和'UIColor(colorLiteralRed:1,green:1,blue:1,alpha:1)' – fpg1503

+0

在操場上試試。白色只有w:1.0和a:1.0 – Idan

+1

確切地說,它們的創建方式不同,這就是爲什麼它是一個合適的邊緣案例 – fpg1503