【问题标题】:Swift 4 Delegates - what about more than 1 implementer?Swift 4 Delegates - 超过 1 个实施者呢?
【发布时间】:2019-01-27 17:03:32
【问题描述】:

斯威夫特 4: 给定:1 个协议和 2 个不同的实现它的类,它们都被实例化了。

实例化的第三个类需要“使用”协议中定义的功能。 如何控制第三类通过协议调用哪些“实现”类?

【问题讨论】:

  • 你自己实现了什么?展示您的进度,以便我们为您提供帮助。
  • “需要‘使用’协议中定义的功能”。协议不提供功能,它只是声明可以做什么。具体类定义了功能。你能展示代码用法示例吗?
  • 有点不清楚。你有一个更容易解释的例子吗?您是否希望两个类都对同一个委托调用做出反应?还是它们像UITableViewDatasourceUITableViewDelegate 一样分开?或者你想要一个代表数组?

标签: swift delegates protocols


【解决方案1】:

首先创建一个委托。

protocol YourCustomDelegate {
    func foo()
}

你的第三个类应该有一个像这样的委托属性:

class YourThirdClass {
    var delegate = YourCustomDelegate? // this will be either the first or the second class. 
}

类的创建者应该设置委托。

class YourSecondClass {
    init() {
        thirdClass = YourThirdClass()
        thirdClass.delegate = self
    }
}

他们执行协议。我使用扩展来获得更结构化的代码。您也可以在 YourSecondClass 本身中实现这一点。

extension YourSecondClass: YourCustomDelegate {
    //implement the functions
    func foo() {
        print("Foo")
    }
}

对第一堂课做同样的事情。

当前使用 YourThirdClass 的类应该将自己设置为委托。如果您想同时使用它们,请将两个委托属性添加到 YourThirdClass。但是,如果需要更新多个类,请考虑使用通知。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    • 2015-03-19
    • 2019-06-06
    • 2013-08-08
    • 1970-01-01
    相关资源
    最近更新 更多