我想在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")
}
}
Run Code Online (Sandbox Code Playgroud)
- >运算符被标记为错误"行上的连续声明必须用;分隔".
我知道这不对,但如果我幽默Xcode,它会"修复"它如下:
override init(geometry: SCNGeometry); -> SCNNode {
Run Code Online (Sandbox Code Playgroud)
这是胡说八道然后Xcode抱怨"预期声明".
我不太了解SCNNode实现 - 如果我在Xcode中查看它,它们都被声明为抽象(在注释中)并且不提供实现.文档没有建议从SCNNode扩展,你直接实例化它,所以我假设我应该能够扩展它.
你可以简单地做:
class MyNode : SCNNode {
/* Xcode required this */
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Run Code Online (Sandbox Code Playgroud)
这将从基类继承指定的初始化程序.
如果你想指定你自己的几何体初始化器,你必须调用基类的指定初始化器,所以我会说这将是你想要的:
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")
}
}
Run Code Online (Sandbox Code Playgroud)
您在SCNNode.h代码中看到的初始化程序是从Objective C方法翻译(自动,我相信)的初始化程序nodeWithGeometry.我相信这是一个方便的初始化程序,即使它没有特别标记,我个人说这是自动头文件转换的错误/限制.文档具体说:
为了一致性和简单性,Objective-C工厂方法在Swift中被映射为便捷初始化器.
不要被abstract评论中的单词混淆; 这是方法的简短描述的HeaderDoc标签,即"摘要"用于删节或摘要.