首页 > 解决方案 > Swift,两次实现相同的委托(没有多播)

问题描述

给定一个非常简单的协议:

protocol TheProtocol {
    func doSomething()
    func doSomethingElse()
    func doThis()
    func doThat()
}

我有一个Base有一个代表等待设置的类。

// Can't modify this class at all
class Base  {
    public var delegate: TheProtocol?
}

我的第二个类B继承自此类Base,并实现TheProtocol以将委托设置为自身。

class B: Base, TheProtocol {

    override init() {
        super.init()
        self.delegate = self
    }

    func doSomething() {

    }
    func doSomethingElse() {

    }
    ... other methods to implement
}

现在我想要做的是拥有一个C包含 的实例的最后一个类,B并设置委托。我希望代表在内部BC.

主要的限制是我不能修改Base类。

class C: TheProtocol {

    var obj = B()

    init() {
        // If I do this it won't fire within B anymore
        obj.delegate = self
    }

    func doSomething() {

    }
    func doSomethingElse() {

    }
    ... other methods to implement
}

标签: swiftdelegates

解决方案


实际上可以使用代理委托。不过真的不推荐。

在 Swift 中,我如何拥有一个具有内部和外部委托的 UIScrollView 子类?


推荐阅读