gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 07:13:48 25 4
gpt4 key购买 nike

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

View Controller :

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

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

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

View 展示器:

class ViewPresenter {
var controller: ViewController?

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

所以,如果我在演示者中进行初始化:

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

然后尝试在 viewController 中像这样初始化:

private let viewPresenter = ViewPresenter(controller: self)

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

最佳答案

问题是在你想要初始化你的演示者的那个时间点没有“ self ”,因为你的 View Controller 稍后被初始化。您可以通过像这样将演示者声明为懒惰来解决此问题

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 中的 View 附加到演示者。

希望这对您有所帮助。

关于ios - 哪个是在 MVP 模式(swift)中初始化演示者的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43426064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com