加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在Swift中扩展SCNNode

发布时间:2020-12-14 04:45:21 所属栏目:百科 来源:网络整理
导读:我想在 Swift中扩展SCNNode(如果可能的话).这是我的尝试: class MyNode : SCNNode { override init(geometry: SCNGeometry) - SCNNode { return super.init(geometry) } /* Xcode required this */ required init(coder aDecoder: NSCoder) { fatalError("i
我想在 Swift中扩展SCNNode(如果可能的话).这是我的尝试:

class MyNode : SCNNode {

    override init(geometry: SCNGeometry) -> SCNNode {
        return super.init(geometry)
    }

    /* Xcode required this */
    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

– >运算符被标记为错误“行上的连续声明必须以;分隔;”.

我知道这不对,但如果我幽默Xcode,它会“修复”它如下:

override init(geometry: SCNGeometry); -> SCNNode {

这是胡说八道然后Xcode抱怨“预期声明”.

我不太了解SCNNode实现 – 如果我在Xcode中查看它,它们都被声明为抽象(在注释中)并且不提供实现.文档没有建议从SCNNode扩展,你直接实例化它,所以我假设我应该能够扩展它.

解决方法

你可以简单地做:

class MyNode : SCNNode {
    /* Xcode required this */
    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

这将从基类继承指定的初始化程序.

如果你想指定你自己的几何体初始化器,你必须调用基类的指定初始化器,所以我会说这将是你想要的:

class MyNode : SCNNode {
    init(geometry: SCNGeometry) {
        super.init()
        self.geometry = geometry
    }
    /* Xcode required this */
    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

您在SCNNode.h代码中看到的初始化器是从Objective C方法nodeWithGeometry翻译(我相信自动)的初始化器.我相信这是一个方便的初始化程序,即使它没有特别标记,我个人说这是自动头文件转换的错误/限制. The documentation具体说:

For consistency and simplicity,Objective-C factory methods get mapped as convenience initializers in Swift.

不要被评论中的抽象词混淆;这是用于方法的简短描述的HeaderDoc标签,即在an abridgement or summary的意义上使用“抽象”.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读