2017-04-15 59 views
1

通常,我编写这个函数来从viewController初始化我的演示者。但我想使用init()来做这件事。我能做什么?哪个是初始化MVP模式的演示者的最好方法(swift)

的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 
    } 
} 

所以,如果我有这样的初始化在我的演讲:

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

并尝试初始化像这样的viewController:

private let viewPresenter = ViewPresenter(controller: self) 

的Xcode给我这个错误: 无法将类型的价值 '(NSObject的) - >() - >视图控制器' 预期参数类型 '的ViewController'

回答

1

的问题是,有没有“自我“此时你想初始化演示者,因为你的视图控制器稍后被初始化。你可以解决此问题通过声明的主持人懒惰像这样

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

希望这会有所帮助。

相关问题