我想用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扩展任何内容,而是直接实例化它,所以我假设我应该能够扩展它。
发布于 2015-01-16 22:34:12
你可以简单地做:
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代码中看到的初始化器是从目标C方法nodeWithGeometry翻译的初始化器(我相信是自动的)。我相信这是一个方便的初始化器,即使它没有明确地标记为这样,我个人认为这是自动头文件翻译的一个缺陷/限制。文献资料特别指出:
为了一致性和简单性,Objective工厂方法在Swift中被映射为方便的初始化器.
不要被注释中的单词abstract搞混;这是HeaderDoc标记,用于对方法的简短描述,即在节录或摘要的意义上使用“抽象”。
https://stackoverflow.com/questions/27993720
复制相似问题