我试图在另一个类中分配节点的委托,但它不起作用。

例:

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
    }
}

08-24 21:45