我有几个继承自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,我知道我做错了,只是无法确切理解。
我对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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句