比较 2 个 UIColor

问题描述 投票:0回答:2

这个问题肯定有人问过,但我找不到合适的参考。我发现了这个问题,但是它比较了三个数字。

我正在尝试比较 2 个 UIColor 以避免重复。每种颜色都在 r、g、b、alpha 中引用。我形成颜色,这样我就可以控制数字格式。

处理这个问题的适当方法是什么?

ios swift uicolor
2个回答
5
投票

如果您以相同的方式创建所有颜色,则可以使用

==

如果您的颜色位于不同的颜色空间,并且您只想比较它们的 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

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
black
white
clear
。作为补偿,您可以创建自己的
grays
并与它进行比较:

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

不等于

UIColor.white

也就是说,很容易在 Playground 上找到边缘情况:

© www.soinside.com 2019 - 2024. All rights reserved.