swift 5.3-CGColor.initred:r,green:g,blue:b,alpha:1.0返回macOS的NSObject

问题描述

我正在尝试使用以下方法在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,alpha: 10.0).cgColor

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

一些建议。

谢谢

解决方法

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

enter image description here

那么,对于Objective-C来说,这甚至不是对象。但是出于表示和操作的目的(即,使其能够像在代码中一样进行传递),它已被包装在NSObject中。

结果是,您无法在调试窗格左侧的变量列表中告诉任何有关此问题的信息。但是在调试窗格的 right 中,您可以要求提供有用的描述。因此,请在函数中的return语句上放置一个断点,并在其中暂停时,请在控制台中说:

(lldb) po coreColour

您将看到类似这样的内容:

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