我有几个继承自 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
并将其主体留空。然后,您创建类 Puzzle
和 Action
派生自 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/