2016-11-08 4 views
3

Это, должно быть, было задано раньше, но я не могу найти подходящую ссылку. Я нашел это question, но это сравнивает три числа друг с другом.Сравнение 2 UIColor (s)

Я пытаюсь сравнить 2 UIColor (s), чтобы избежать дублирования. Каждый цвет ссылается на 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 black, white и clear. Чтобы компенсировать это, вы можете создать свой собственный 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

Смежные вопросы