我试图在另一个类中分配一个节点的委托,但它不起作用。
示例:
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.protocol类型的值分配给ClassADelegate。
任何解决方案?感谢。
Ps。:这是一个非常简单的例子,我知道它不会导致任何结果。我的问题只是委托声明。
答案 0 :(得分:1)
你有很多问题。
首先,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
}
}