这个问题可能已经被问过了,但我找不到合适的参考资料。我找到了这个问题,但那是将三个数字相互比较。
我试图比较2个UIColor以避免重复。每个颜色都引用了r、g、b、alpha。我形成颜色,以便可以控制数字格式。
应该如何处理这个问题?
非常感谢您的帮助。
我试图比较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
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
从评论中,存在一些边缘情况。我认为这些都是灰色
的黑色
,白色
和透明
。为了弥补这个问题,你可以创建自己的灰色
并与之比较:
let myOtherWhite = UIColor(colorLiteralRed: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
这意味着它不等于UIColor.white
UIColor.white
和UIColor(colorLiteralRed: 1, green: 1, blue: 1, alpha: 1)
。 - fpg1503
UIColor
是Equatable
。 - user28434'mstepEquatable
实现并没有考虑到不同方式创建的颜色(不同的颜色空间)。 - fpg1503