我想在
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的意义上使用“抽象”.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。