How to compare colors in swift

后端 未结 4 1733
既然无缘
既然无缘 2020-12-19 08:39

I want change button background for different state. I try so:

 @IBAction func addToShedulerAction(sender: UIButton) {   
       println(sender.backgroundCol         


        
相关标签:
4条回答
  • 2020-12-19 09:09

    You don't compare colors using the == operator. You do it like this and you need the ! to unwrap the optional color:

    if sender.backgroundColor!.isEqual(UIColor.redColor()) {
                
    }
    

    Also, remove the extraneous = in your assignment statement. It should be:

    sender.backgroundColor = UIColor.whiteColor()
    
    0 讨论(0)
  • 2020-12-19 09:16

    You have a mistake in your first if clause. It should be:

    if sender.backgroundColor.isEqual(UIColor.redColor()){
        sender.backgroundColor=UIColor.whiteColor // only one '=' here
    }
    
    0 讨论(0)
  • 2020-12-19 09:21

    Previous answers are wrong cause

    UIColor.black.isEqual(UIColor(red: 0, green: 0, blue: 0, alpha: 1))
    

    returns false

    add this code to your project (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
    }
    

    so now

    UIColor.black == UIColor(red: 0, green: 0, blue: 0, alpha: 1)
    

    returns true

    and for you:

    if sender.backgroundColor == .red {
      sender.backgroundColor = .white
    } else {
      sender.backgroundColor = .red
    }
    

    now your code looks pretty :)

    0 讨论(0)
  • 2020-12-19 09:27

    Remember when you are comparing UIColors you have to write description at the end of the color for both side, if you don't write this, every time it will enter into else block. For Example, see the below code

    if(ocularPlus1Btn.backgroundColor?.description == UIColor.init(red: 23.0 / 255.0, green: 82 / 255.0, blue: 84 / 255.0, alpha: 1).description) {
       return "positive"
    } else {
       return "negative"
    }
    
    0 讨论(0)
提交回复
热议问题