对协议感到困惑

米雷斯

我有几个继承自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,我知道我做错了,只是无法确切理解。

安德烈·切尔努卡(Andrey Chernukha)

我对Swift的了解不是很好,但我认为您可以尝试 self.addChild(lvl as SKNode)

另一个解决方案:

好吧,我认为,那么您需要重新设计继承。尝试使类Level继承自,SKNode并在其中声明一个方法setup,然后将其主体留空。然后,您创建类PuzzleAction从中派生Level并具有自己的实现setup然后您的代码是:

var lvl: Level
if myLevel > 5 {
  lvl = Puzzle()
}
else {
   lvl = Action()
}

lvl.setup(myLevel)
self.addChild(lvl)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章