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
相关产品推荐
相关产品推荐

