通常,我将此函数编写为从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中的视图附加到演示者。
希望这可以帮助。