委托另一个班级

时间:2015-09-12 05:01:11

标签: swift delegates sprite-kit

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

示例:

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。:这是一个非常简单的例子,我知道它不会导致任何结果。我的问题只是委托声明。

1 个答案:

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