這一定是以前曾問過的,但我找不到合適的參考。我發現這個question,但是比較三個數字。比較2 UIColor(s)
我想比較2個UIColor以避免重複。每種顏色在r,g,b,alpha中被引用。我形成了顏色,所以我可以控制數字格式。
什麼是適當的方式來處理這個問題?
所有幫助表示讚賞。
這一定是以前曾問過的,但我找不到合適的參考。我發現這個question,但是比較三個數字。比較2 UIColor(s)
我想比較2個UIColor以避免重複。每種顏色在r,g,b,alpha中被引用。我形成了顏色,所以我可以控制數字格式。
什麼是適當的方式來處理這個問題?
所有幫助表示讚賞。
如果您以同樣的方式創建所有顏色,則可以使用==
。
如果你的顏色是不同的色彩空間,你只是想比較它們的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
非常好的答案 –
它完美的工作。萬分感謝 –
如果初始化爲的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 black
,white
和clear
。爲了彌補,你可以創建自己的grays
,並比較其:
let myOtherWhite = UIColor(colorLiteralRed: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
這是不等於到UIColor.white
所以,你要知道,如果2種顏色的一樣? –
比較顏色並不是一項簡單的任務,你想通過它們的RGBA值來比較它們嗎? – fpg1503
@appzYourLife,@ fpg1503如果我沒有記錯,'UIColor'是'Equatable' – user28434