You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中UIButton backgroundColor比较失效问题求助

问题原因及解决办法
  • ==比较UIColor失效的核心原因:
    UIColor属于引用类型,Swift中==运算符对引用类型默认比较的是内存地址,而非颜色的实际色彩值。UIColor.systemGreen这类系统动态颜色,会根据当前的 trait collection(比如暗黑模式、显示特性)返回适配的实例,甚至同一环境下多次访问也可能生成不同的内存实例,导致地址不匹配,if条件自然不成立,代码进入else分支。

  • 正确的颜色比较方式:
    要比较颜色的实际色彩值,需使用UIColor的isEqual(_:)方法,修改后的代码如下:

    if sender.backgroundColor?.isEqual(UIColor.systemGreen) == true {
        doSomething()
    } else {
        otherThing()
    }
    

    针对iOS 13及以上的动态颜色,如果需要严格匹配当前控件环境下的颜色表现,也可以先解析为当前trait对应的具体颜色再比较:

    let targetGreen = UIColor.systemGreen.resolvedColor(with: sender.traitCollection)
    if sender.backgroundColor?.resolvedColor(with: sender.traitCollection).isEqual(targetGreen) == true {
        doSomething()
    } else {
        otherThing()
    }
    

内容的提问来源于stack exchange,提问作者kepler siguineau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 19:10:47