如何捕获 SCNReferenceNode.referenceURL 属性 (SceneKit) 上的错误?

How to catch an error on SCNReferenceNode.referenceURL property (SceneKit)?

问题是,如果我创建 SCNReferenceNode 并尝试获取 referenceURL

...
        let refNode: SCNReferenceNode = SCNReferenceNode()
        let curUrl = refNode.referenceURL
...

为了检查是否是nil,我得到了一个异常

Thread 1: EXC_BREAKPOINT (code=1, subcode=0x186d06dd0)

看起来没有办法解决这个问题。

P.S. 我知道有一个选项可以给 URL 这样的构造函数,比如 SCNReferenceNode(myURL),但我必须使用我在 refURL 之前创建 SCNReferenceNode 的方法可用。

似乎引用 URL 属性 应该在 Objective-C 实现中标记为可为空,这将使 属性 成为可选的,但事实并非如此不是这样的。如您所见,任何通过 referenceURL 属性 访问它的尝试都会导致崩溃。

但是,由于节点是 NSObject,您可以使用 key-value 编码,并为其添加扩展名,如下所示:

extension SCNReferenceNode {
    var optionalReferenceURL: URL? {
        value(forKey: "referenceURL") as? URL
    }
}

这将使您可以安全地访问参考文献 URL 属性。同时,您还应该将此作为错误提交给 SceneKit 团队。