比较UIColor仅适用于黑色和灰色

时间:2016-10-08 20:24:14

标签: ios swift uicolor

我目前正在尝试比较swift中的一些UIColor(特别是SKLabelNode的颜色),除非颜色为灰色或黑色,否则一切正常。请注意我也只使用内置颜色

我尝试将我创建的UIColor与labelNode.color和labelNode.fontColor进行比较(两者都设置相同),但正如我所说,灰色和黑色总是失败。我查看过一些建议使用colour.description等的帖子以及这篇帖子Issue comparing UIColors in Swift

顺便说一下,如果我不比较描述而是比较实际的颜色对象,那么Brown也会失败。

但以前帖子的答案似乎不起作用。这是一个游乐场的例子:

   let checkColor = UIColor.black

  let label = SKLabelNode(text: "foo")
  label.fontColor = UIColor.black
  print(label.fontColor?.description == checkColor.description)

        let checkColor = UIColor.brown

  let label = SKLabelNode(text: "foo")
  label.fontColor = UIColor.brown
  print(label.fontColor? == checkColor) // this returns 'false' for brown when description isn't used

任何想法?

我找到的唯一方法是将checkColor变量分配给另一个虚拟SKLabelNode,并将2个fontColor属性相互比较。

1 个答案:

答案 0 :(得分:2)

如果您尝试记录checkColor,您会看到它的类型为UIExtendedGrayColorSpace,而您的fontColor的类型为UIExtendedSRGBColorSpace。

解决方案是使用RGB颜色初始化checkColor(我试图将checkColor转换为rgb,但没有找到解决方案)。所以这就是我得到的:

let checkColor = UIColor.black
let checkColorRGB = UIColor.init(red: 0, green: 0, blue: 0, alpha: 1)

let label = SKLabelNode(text: "foo")
label.fontColor = UIColor.black
print(label.fontColor == checkColor)
print(label.fontColor == checkColorRGB)
print(label.fontColor!)
print(checkColor)
print(checkColorRGB)

在操场上测试,你会看到第二个打印日志为真