title: Which is the best way to init presenter in MVP-pattern (swift)
body: <p>Usually, I write this function to init my presenter from viewController. But I want to use <strong>init()</strong> for making this. What can I do?</p>
  
  <p>ViewController :</p>
  
  <pre><code>class ViewController: UIViewController {
    private let viewPresenter = viewPresenter()
  
    override func viewDidLoad() {
      self.viewPresenter.attachView(controller: self)
    }
  
    @IBAction func faceBookButtonTapped(sender: UIButton) {
      self.viewPresenter.showLoginWindow()
    }
  }
  </code></pre>
  
  <p>ViewPresenter :</p>
  
  <pre><code>class ViewPresenter {
    var controller: ViewController?
  
    func attachView(controller: ViewController) {
      self.controller = controller
    }
  }
  </code></pre>
  
  <p>So, If I make this Init in my presenter :</p>
  
  <pre><code>let controller: ViewController?
  init (controller:ViewController) {
      self.controller = controller
  }
  </code></pre>
  
  <p>And try to init like this in viewController:</p>
  
  <pre><code>private let viewPresenter = ViewPresenter(controller: self)
  </code></pre>
  
  <p>Xcode give me this error: 
  <strong>Cannot convert value of type '(NSObject) -> () -> ViewController' to expected argument type 'ViewController'</strong></p>