是否可以共享一个委托,或者将协议的方法重新委托给另一个委托?

时间:2016-12-07 19:57:36

标签: ios swift delegates

class SuperClass
{
    var delegate : SuperClassDelegate?
}

protocol SuperClassDelegate
{
    func doFirstAction ()
    func doSecondAction ()
}

class SubClass : SuperClass , SuperClassDelegate
{
    override init ()
    {
        super.init()

        self.delegate = self
    }

    func doFirstAction () {}
}

class MyViewController : UIViewController
{
    override func viewDidLoad ()
    {
        let c : SubClass = SubClass()
    }

    func doSecondAction ()
    {
        // I want to handle this action in the ViewController
    }
}

所以我创建了一个子类,为方便起见,它可以充当超类委托。但是,超类委托中的一些方法仍然在视图控制器中最合适的实现,这意味着我不希望我的子类实现这些。

我是否有更好的方式来处理这些代表,以便我可以'分担'责任?

1 个答案:

答案 0 :(得分:1)

您可以创建多播委托。这样,多个对象(子类,ViewController)可以是来自调用者对象的委托。协议方法是可选的,然后您可以选择哪个类将实现协议中的哪些方法。

或者,您可以在调用者对象中创建2个具有2个委托引用的协议。除非有某些特定原因要使用单一协议。