如何在swift中比较颜色

Wal*_*est 4 ios swift

我想改变不同状态的按钮背景.我试试这样:

 @IBAction func addToShedulerAction(sender: UIButton) {   
       println(sender.backgroundColor)     
        if sender.backgroundColor==UIColor.redColor(){
            sender.backgroundColor==UIColor.whiteColor()
        }
        else //if sender.backgroundColor==UIColor.whiteColor()
        {
            sender.backgroundColor=UIColor.redColor()
        }
    }
Run Code Online (Sandbox Code Playgroud)

但在第一个按钮println打印nil和背景变为红色,在第二次打印println打印"可选(UIDeviceRGBColorSpace 1 0 0 1)"和颜色不会改变

Ian*_*Ian 13

您不使用==运算符比较颜色.你这样做,你需要!打开可选颜色:

if sender.backgroundColor!.isEqual(UIColor.redColor()) {
            
}
Run Code Online (Sandbox Code Playgroud)

另外,删除=赋值语句中的无关.它应该是:

sender.backgroundColor = UIColor.whiteColor()
Run Code Online (Sandbox Code Playgroud)


Dmi*_*lov 10

先前的答案是错误的原因

UIColor.black.isEqual(UIColor(red: 0, green: 0, blue: 0, alpha: 1))
Run Code Online (Sandbox Code Playgroud)

退货 false

将此代码添加到您的项目中(Swift 4)

extension UIColor {
  static func == (l: UIColor, r: UIColor) -> Bool {
    var r1: CGFloat = 0
    var g1: CGFloat = 0
    var b1: CGFloat = 0
    var a1: CGFloat = 0
    l.getRed(&r1, green: &g1, blue: &b1, alpha: &a1)
    var r2: CGFloat = 0
    var g2: CGFloat = 0
    var b2: CGFloat = 0
    var a2: CGFloat = 0
    r.getRed(&r2, green: &g2, blue: &b2, alpha: &a2)
    return r1 == r2 && g1 == g2 && b1 == b2 && a1 == a2
  }
}
func == (l: UIColor?, r: UIColor?) -> Bool {
  let l = l ?? .clear
  let r = r ?? .clear
  return l == r
}
Run Code Online (Sandbox Code Playgroud)

所以现在

UIColor.black == UIColor(red: 0, green: 0, blue: 0, alpha: 1)
Run Code Online (Sandbox Code Playgroud)

退货 true

以及对于你:

if sender.backgroundColor == .red {
  sender.backgroundColor = .white
} else {
  sender.backgroundColor = .red
}
Run Code Online (Sandbox Code Playgroud)

现在您的代码看起来很漂亮:)