ios - 对协议(protocol)感到困惑

标签 ios swift

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

我制定了这样的协议(protocol):

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 我知道我做错了什么,只是不明白到底是什么。

最佳答案

我不太擅长 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)

关于ios - 对协议(protocol)感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27812941/

相关文章:

ios - 从元组的 Swift 数组中投影一列

ios - 使用 AFNetworking 2.0 + NSProgress + Custom ProgressView 获取下载进度

ios - 动画移回原始位置后未调用UIView动画

ios - 如何通过创建本地上下文将 GCD 与 Core Data 一起使用

ios - CNContactViewController - 编辑按钮未显示

ios - EXC_BAD_ACCESS 在使用它评估 NSExpression 后更新 Swift 字典时

ios - 尝试使用在 SafariViewController 中启动链接的 tableviewcells 快速创建选项卡式应用程序

swift - swift 中 struct.self 的类型是什么?

swift - swift 4 中的访问控制

iOS 快速 : change imageview image in the middle of rotation animation