在 Swift 中扩展 SCNNode
Extending SCNNode in Swift
我想在 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")
}
}
-> 运算符被标记为错误 "Consecutive declarations on a line must be separated by ;"。
我知道这是不对的,但如果我幽默 Xcode 它 "fixes" 如下:
override init(geometry: SCNGeometry); -> SCNNode {
这是胡说八道,然后 Xcode 抱怨 "Expected declaration"。
我不太了解 SCNNode 实现 - 如果我在 Xcode 中查看它,它都被声明为抽象的(在注释中)并且没有提供任何实现。文档没有建议从 SCNNode 扩展任何东西,你直接实例化它,所以我假设我应该能够扩展它。
你可以简单地做:
class MyNode : SCNNode {
/* Xcode required this */
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
将从基class继承指定的初始化器。
如果你想指定你自己的采用几何体的初始化器,你必须调用基的指定初始化器class,所以我想这就是你想要的:
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
翻译而来的(我相信是自动翻译的)初始化程序。我相信这是一个方便的初始化程序,即使它没有特别标记为这样,我个人认为这是自动头文件翻译的 bug/limitation。 The documentation 具体说:
For consistency and simplicity, Objective-C factory methods get mapped as convenience initializers in Swift.
不要被评论里的abstract
这个词搞糊涂了;这是 HeaderDoc tag for a short description of a method, i.e. "abstract" is used in the sense of an abridgement or summary.
我想在 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")
}
}
-> 运算符被标记为错误 "Consecutive declarations on a line must be separated by ;"。
我知道这是不对的,但如果我幽默 Xcode 它 "fixes" 如下:
override init(geometry: SCNGeometry); -> SCNNode {
这是胡说八道,然后 Xcode 抱怨 "Expected declaration"。
我不太了解 SCNNode 实现 - 如果我在 Xcode 中查看它,它都被声明为抽象的(在注释中)并且没有提供任何实现。文档没有建议从 SCNNode 扩展任何东西,你直接实例化它,所以我假设我应该能够扩展它。
你可以简单地做:
class MyNode : SCNNode {
/* Xcode required this */
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
将从基class继承指定的初始化器。
如果你想指定你自己的采用几何体的初始化器,你必须调用基的指定初始化器class,所以我想这就是你想要的:
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
翻译而来的(我相信是自动翻译的)初始化程序。我相信这是一个方便的初始化程序,即使它没有特别标记为这样,我个人认为这是自动头文件翻译的 bug/limitation。 The documentation 具体说:
For consistency and simplicity, Objective-C factory methods get mapped as convenience initializers in Swift.
不要被评论里的abstract
这个词搞糊涂了;这是 HeaderDoc tag for a short description of a method, i.e. "abstract" is used in the sense of an abridgement or summary.