我有几个继承自SKNode的课程。 它们都有setup()方法。它们彼此差异很大。
我已经制定了这样的协议:
protocol LevelProtocol {
func setup(level: Int)
}
我的两个类看起来像是:
class Puzzle: SKNode, LevelProtocol {
func setup(level: Int) {do something}
class Action: SKNode, LevelProtocol {
func setup(level: Int) {do something}
在我的主类中,我需要在一个变量中使用其中一个类。 如何正确定义此变量?
我试过这个:
var lvl: LevelProtocol
if myLevel > 5 {
lvl = Puzzle()
else {
lvl = Action()
}
lvl.setup(myLevel)
self.addChild(lvl)
但是编译器说LevelProtocol不能转换为SKNode 我知道我做错了什么,只是无法理解究竟是什么。
答案 0 :(得分:2)
我在Swift中并不是很好,但我认为你可以试试self.addChild(lvl as SKNode)
另一种解决方案:
嗯,我想,那么你需要重新设计继承。尝试继承Level
继承SKNode
,并在其中声明一个方法setup
,并将其正文留空。然后,您创建从Puzzle
派生的类Action
和Level
,并拥有自己的setup
实现。然后你的代码是:
var lvl: Level
if myLevel > 5 {
lvl = Puzzle()
}
else {
lvl = Action()
}
lvl.setup(myLevel)
self.addChild(lvl)