【问题标题】:Are delegates necessary here?这里需要代表吗?
【发布时间】:2018-03-23 05:09:20
【问题描述】:

这可能是非常基本的。但是,我不太确定在以下情况下是否需要代表? 委托是否以同步方式使用?如果是,在一个由委托人调用的函数中调用委托方法是否很好[如下例所示]?

class FooViewController: UIViewController {

    func login() {
       let loginHelper = LoginHelper()
       loginHelper.fooDelegate = self
       loginHelper.shouldEnableLogin()
    }

    func enableLogin() {
       // Do some UI updates
    }

    func reset() {
       // Clear some values in the views
    }
}

class LoginHelper {
    weak var delegate: fooDelegate?

    func shouldEnableLogin() {
       //clear some text views
        delegate.reset()
        //do some validation, synchronous
        delegate.enableLogin()
    }
}

【问题讨论】:

  • 视情况而定。您是否在 shouldEnableLogin 中进行一些后台/数据操作?如果不是,那根本没有必要,否则你就在正确的轨道上。

标签: ios swift design-patterns


【解决方案1】:

委托是一种设计模式,当特定事件发生时,它允许一个对象向另一个对象发送消息。想象一个对象 A 调用一个对象 B 来执行一个动作。一旦动作完成,对象 A 应该知道 B 已经完成了任务并采取必要的行动,这可以在委托的帮助下实现!

【讨论】:

    【解决方案2】:

    我认为这里的关键是您的问题“代理是否以同步方式使用?”。

    基本的委托机制是同步的:即被调用的委托方法将与调用者在同一个线程上。因此,如果调用者是您的对象,那么您可以控制这发生在哪个线程上。

    但是调用者可以创建一个新线程,然后从中调用委托方法。因此,如果调用者不是你的,请在依赖调用在同一个线程上之前仔细检查它的文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 1970-01-01
      • 2017-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多