对协议感到困惑

时间:2015-01-07 05:26:52

标签: ios swift

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

1 个答案:

答案 0 :(得分:2)

我在Swift中并不是很好,但我认为你可以试试self.addChild(lvl as SKNode)

另一种解决方案:

嗯,我想,那么你需要重新设计继承。尝试继承Level继承SKNode,并在其中声明一个方法setup,并将其正文留空。然后,您创建从Puzzle派生的类ActionLevel,并拥有自己的setup实现。然后你的代码是:

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

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