对协议感到困惑
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 Puzzle
和 Action
派生自 Level
并有自己的 setup
实现。那么你的代码是:
var lvl: Level
if myLevel > 5 {
lvl = Puzzle()
}
else {
lvl = Action()
}
lvl.setup(myLevel)
self.addChild(lvl)
我有几个 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 Puzzle
和 Action
派生自 Level
并有自己的 setup
实现。那么你的代码是:
var lvl: Level
if myLevel > 5 {
lvl = Puzzle()
}
else {
lvl = Action()
}
lvl.setup(myLevel)
self.addChild(lvl)