我试图在另一个类中分配节点的委托,但它不起作用。
例:
A类:
import SpriteKit
protocol ClassADelegate {
func testA() -> Bool
}
class ClassA: SKSpriteNode {
}
B级:
import SpriteKit
protocol ClassBDelegate {
func testB() -> Bool
}
class ClassB: SKSpriteNode {
let aux = ClassA()
aux.delegate = self
}
所以我的问题是当我尝试初始化aux委托时。我已经尝试过aux.delegate = ClassADelegate,但是也不起作用。它说我不能为ClassADelegate分配ClassADelegate.protocol类型的值。
有什么办法吗?谢谢。
附注:这是一个非常简单的示例,我知道它不会导致任何结果。我的问题只是委托声明。
最佳答案
你有很多问题。
首先,ClassA
没有名为delegate
的属性。加上:
class ClassA: SKSpriteNode {
var delegate : ClassADelegate?
}
其次,您不能只在类中间随意抛出代码。它必须有一个方法,因此将
aux.delegate = self
移至初始化程序:class ClassB: SKSpriteNode {
let aux = ClassA()
override init(texture: SKTexture!, color: UIColor!, size: CGSize) {
super.init(texture: texture, color: color, size: size)
aux.delegate = self
}
}
第三,
ClassB
不符合ClassADelegate
。声明它可以:class ClassB: SKSpriteNode, ClassADelegate {
第四,
ClassB
未实现ClassADelegate
所需的方法,在本例中为TestA()
。因此添加:func testA() -> Bool {
return true
}
最后,将所需的初始化程序添加到
ClassB
:required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
这是将起作用的最终代码:
protocol ClassADelegate {
func testA() -> Bool
}
class ClassA: SKSpriteNode {
var delegate : ClassADelegate?
}
protocol ClassBDelegate {
func testB() -> Bool
}
class ClassB: SKSpriteNode, ClassADelegate {
let aux = ClassA()
override init(texture: SKTexture!, color: UIColor!, size: CGSize) {
super.init(texture: texture, color: color, size: size)
aux.delegate = self
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func testA() -> Bool {
return true
}
}