【问题标题】:swift 5.3 - CGColor.init(red: r, green: g, blue: b, alpha: 1.0) returns NSObject for macOsswift 5.3 - CGColor.init(red: r, green: g, blue: b, alpha: 1.0) 为 macOS 返回 NSObject
【发布时间】:2021-02-03 20:49:32
【问题描述】:

我正在尝试在 macOS Catalina 10.15.7 的 Swift 5.3 中创建 CGColor,使用:

let colour : CGColor = CGColor.init(red: r, green: g, blue: b, alpha: 10.0)

但是返回的对象是一个 NSObject。与使用相同的结果

let colour : CGColor = NSColor.init(red: r, green: g, blue: b, alpha: 10.0).cgColor

NSColor 已正确创建,但在检索 CGColor 时,结果是 NSObject。

一些建议。

谢谢

【问题讨论】:

  • 阿尔法 = 1.0。对不起。
  • 您“检索 CGColor”的部分在哪里?
  • 我要问的是您如何“知道”CGColor 不是 CGColor。当然是 CGColor。
  • 我使用let color = NSColor.init(red: 0.4434, green: 1.0, blue: 0.4343, alpha: 1.0) 创建了一个 NSColor,结果对象是一个有效的 NSColor 对象,然后我尝试在图形上下文中使用以下方法在视图中绘制一些线条: let coreColour : CGColor = color.cgColor 结果对象是 NSObject 而不是 CGColor 对象,那么结果是不可见的颜色。如果我使用 let coreColour : CGColor = NSColor.red.cgColor 生成的对象是一个有效的 CGColor 对象,那么绘制线是红色的。
  • 我在 Xcode 调试控制台中看到了。

标签: swift cgcolor


【解决方案1】:

问题是您正在 Xcode 调试器的变量窗格中检查此对象。果然,它只是作为一个 NSObject 列在那里。但那是因为它就是我们所说的伪对象。 CGColor 类型不是真正的对象类型,尽管 Swift 试图将其伪装成一个对象类型;它实际上是一个 CFType,它是一个不透明的结构——一个 Objective-C 结构。您可以通过打开三角形来发现这一点:

那么,对于 Objective-C,这甚至不是一个对象。但出于呈现和操作的目的——即,可以像在代码中那样传递它——它被封装在一个 NSObject 中。

结果是您无法在调试窗格左侧的变量列表中说出任何有关此内容的信息。但在调试窗格的右侧,您可以要求提供有用的描述。因此,在你的函数中的 return 语句处放置一个断点,当你在那里暂停时,在控制台中说:

(lldb) po coreColour

你会看到这样的:

<CGColor 0x6000026224c0> [<CGColorSpace 0x6000026085a0> (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1)] ( 0.784314 0.784314 0.784314 1 )

【讨论】:

  • 是的,我使用 print(coreColour) 和 reed &lt;CGColor 0x600002617de0&gt; [&lt;CGColorSpace 0x600002614600&gt; (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1)] ( 0.176471 0.176471 0.176471 1 ),但是为什么没有绘制所需的颜色?,只有一条黑线。
猜你喜欢
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 2018-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多