SKNodes可以使用空的初始化程序进行初始化,例如let node = SKNode().SKNode但是,子类化会破坏此功能.在子类化之后SKNode,Xcode在尝试在子类上使用空初始化程序时会生成此错误:
Cannot invoke initializer for type "X" with no arguments
Run Code Online (Sandbox Code Playgroud)
假设SKNodeSubclass是子类SKNode,该行let node = SKNodeSubclass()生成此错误.
是否有可能从SKNode继承并使用像SKNode一样的空初始化器?
class StatusScreen: SKNode {
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
init(gridWidth: CGFloat, deviceHeight: CGFloat) {
super.init()
// Do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
ABa*_*ith 10
如果您查看Swift编程语言:初始化,在自动初始化程序继承下,自动继承超类的指定初始化程序的规则之一是:
如果您的子类没有定义任何指定的初始化器,它会自动继承其所有超类指定的初始化器.
这假设您为引入的任何新属性提供默认值.
既然你定义指定初始化器init(gridWidth: CGFloat, deviceHeight: CGFloat)子类不继承init()的SKNode.因此,为了能够使用StatusScreen()你需要init()在你的StatusScreen类中覆盖:
class StatusScreen: SKNode {
// ...
override init() {
super.init()
// Do other stuff...
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以使用:
let node1 = StatusScreen()
let node2 = StatusScreen(gridWidth: 100, deviceHeight: 100)
Run Code Online (Sandbox Code Playgroud)
希望有所帮助!
| 归档时间: |
|
| 查看次数: |
1972 次 |
| 最近记录: |