对协议感到困惑

Confused about protocols

我有几个 class 继承自 SKNode。 它们都有一个 setup() 方法。他们彼此非常不同。

我制定了这样的协议:

protocol LevelProtocol {   
    func setup(level: Int)
}

我的两个 class 看起来像这些:

class Puzzle: SKNode, LevelProtocol {
    func setup(level: Int) {do something}

class Action: SKNode, LevelProtocol {
    func setup(level: Int) {do something}

并且在我的主要 class 中,我需要在一个变量中使用这些 classes 之一。 如何正确定义此变量?

我试过这个:

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

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

但是编译器说LevelProtocol不能转换为SKNode 我知道我做错了什么,只是不明白到底是什么。

我不太擅长 Swift 但我认为你可以试试 self.addChild(lvl as SKNode)

另一个解决方案:

嗯,我想,那你需要重新设计继承。尝试使 class Level 继承自 SKNode 并在那里只声明一个方法 setup 并将其主体留空。然后你创建 classes PuzzleAction 派生自 Level 并有自己的 setup 实现。那么你的代码是:

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

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