swift - 你如何在 Swift 中调用子类的委托(delegate)函数?

标签 swift class delegates protocols subclass

A 类是委托(delegate)。 B 类有一个带有方法的协议(protocol),我可以简单地通过调用类似 delegate?.myFunc()

的方法来调用它们
protocol ClassBDelegate: class {
    func myFunc()
}

class Class B {
    weak var delegate: ClassBDelegate?
    delegate?.myFunc()
}

但是现在 myFunc() 在 A 类使用的另一个类(C 类)中,但现在我希望 B 类调用 A 类实例中的函数C类。

这是怎么做到的?我知道有答案,但也许我不知道要搜索什么?我希望我可以写类似 delegate?.classC.myFunc() 的东西,但它不允许我这样做。

最佳答案

B 类无权了解其委托(delegate)人做什么 以完成其命令。这就是协议(protocol)/委托(delegate)模式的。该协议(protocol)隐藏了委托(delegate)的实现——不仅如此,还隐藏了委托(delegate)的身份

A 类作为委托(delegate),将通过以某种方式与其 C 类助手对话来响应 myFunc。也许那是它的委托(delegate),我不知道。那没关系。但是不要改变 B 级对情况的了解或它说话的方式。

因此,您需要在类 A 中编写一个函数 来为您调用其类 C。如果 A 类是委托(delegate),B 类应该对远端发生的事情一无所知。这是一个私有(private)的实现细节。

关于swift - 你如何在 Swift 中调用子类的委托(delegate)函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50614156/

相关文章:

c++ - 我可以避免 Matrix 类的迭代器中的循环依赖吗?

c++ - 通过指针更改私有(private)数据成员是不可能的吗?

swift - 来自 URL html source Swift 的奇怪输出

swift - 如何避免强制打开日期 .second 组件?

ios - 获取 CCCryptorStatus "-4310"

c++ - C++类中无法重载+运算符

swift - 如何实现 unarchiver 委托(delegate)来覆盖类名?

c++ - 指向成员函数的指针的模板参数推导?

c# - 为许多控件调用委托(delegate)

ios - 使用 UITextField + UIPickerview 时禁用键盘输入