如何在 swift 4 中比较两个 CGColor

Tar*_*dan 5 calayer cgcolor ios swift swift4

基本上我想做的就是将 a layer.fillColorwhich is aCGColor与进行比较UIColor.black.cgColor

该函数CGColorEqualToColor现已在 Swift 4 中弃用。

我努力了:

if(layer.fillColor === UIColor.black.cgColor){
          return      
}
Run Code Online (Sandbox Code Playgroud)

但它仍然不起作用。我猜他们一定有相同的 kCGColorSpaceModel。

这是日志中每种颜色的输出

<CGColor 0x1c02a15c0> [<CGColorSpace 0x1c02a0a20> (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1; extended range)] ( 0 0 0 1 )
<CGColor 0x1c008e290> [<CGColorSpace 0x1c02a0f60> (kCGColorSpaceICCBased; kCGColorSpaceModelMonochrome; Generic Gray Gamma 2.2 Profile; extended range)] ( 0 1 )
Run Code Online (Sandbox Code Playgroud)

解决办法是什么?

rma*_*ddy 1

CGColor这是检查给定颜色是否为黑色的扩展。这适用于 RGB 和灰度颜色空间中的颜色。

extension CGColor {
    func isBlack() -> Bool {
        let count = numberOfComponents
        if count > 1 {
            if let components = components {
                for c in 0..<components.count-1 { // skip the alpha component
                    // All components are 0 for black
                    if components[c] != 0.0 {
                        return false
                    }
                }

                return true
            }
        }

        return false
    }
}

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

您可以将其用作:

if layer.fillColor.isBlack() {
    return
}
Run Code Online (Sandbox Code Playgroud)