哪个是在MVP模式中初始化演示者的最佳方式(swift)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了哪个是在MVP模式中初始化演示者的最佳方式(swift)相关的知识,希望对你有一定的参考价值。

通常,我将此函数编写为从viewController初始化我的演示者。但是我想使用init()来实现这个目的。我能做什么?

ViewController:

class ViewController: UIViewController {
  private let viewPresenter = viewPresenter()

  override func viewDidLoad() {
    self.viewPresenter.attachView(controller: self)
  }

  @IBAction func faceBookButtonTapped(sender: UIButton) {
    self.viewPresenter.showLoginWindow()
  }
}

ViewPresenter:

class ViewPresenter {
  var controller: ViewController?

  func attachView(controller: ViewController) {
    self.controller = controller
  }
}

所以,如果我在演示者中制作这个Init:

let controller: ViewController?
init (controller:ViewController) {
    self.controller = controller
}

并尝试在viewController中初始化为:

private let viewPresenter = ViewPresenter(controller: self)

Xcode给我这个错误:无法将类型'(NSObject) - >() - > ViewController'的值转换为预期的参数类型'ViewController'

答案

问题是,在您想要初始化演示者的那个时间点没有“自我”,因为您的视图控制器稍后会被初始化。你可以通过声明你的演示者像这样懒惰来解决这个问题

fileprivate lazy var viewPresenter: ViewPresenter = {
    return ViewPresenter(controller: self)
}()

或者您可以稍后在viewDidLoad中初始化您的演示者

private var viewPresenter: ViewPresenter!

override func viewDidLoad() {
    super.viewDidLoad()

    self.viewPresenter = ViewPresenter(controller: self)
}

如果你问我最好的方法(就像你已经做的那样)将viewDidLoad中的视图附加到演示者。

希望这可以帮助。

以上是关于哪个是在MVP模式中初始化演示者的最佳方式(swift)的主要内容,如果未能解决你的问题,请参考以下文章

应该将演示者(mvP)注入(dagger2)到android中的视图吗?

在 MVP 模式中,了解活动/上下文的演示者是不是是个坏主意?

哪个是在 Python 中并行运行多个任务的最佳方式

在 MVP 模式中,适配器应该持有模型还是演示者应该持有模型并让适配器引用它?

MVP模式在Android开发中的最佳实践

我应该以MVP模式将我的视图投射到iOS上的演示者中的UIViewController吗?