Swift-MVP: Function is not called in the presenter delegate. What am I doing wrong?

35 Views Asked by At

Can someone explain to me why this simple MVP implementation is not working? The addressDemoViewControllerDidTap method in the AddressDemoPresenter extension is not called. Everything seems ok to me, but I am probably missing something.

final class AddressDemoPresenter {
    private weak var addressDemoViewController: AddressDemoViewController?

    func makeAddressDemoViewController() -> UINavigationController {
        let demoViewController = AddressDemoViewController()
        addressDemoViewController = demoViewController
        demoViewController.delegate = self
        return UINavigationController(rootViewController: demoViewController)
    }
}

extension AddressDemoPresenter: AddressDemoViewControllerDelegate {
    func addressDemoViewControllerDidTap(_ addressDemoViewController: AddressDemoViewController) {
        print("FOO")
    }
}

// VIEW CONTROLLER

protocol AddressDemoViewControllerDelegate: AnyObject {
    func addressDemoViewControllerDidTap(_ addressDemoViewController: AddressDemoViewController)
}

final class AddressDemoViewController: UIViewController {
    weak var delegate: AddressDemoViewControllerDelegate?

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .white

        let button = UIButton(type: .system)
        button.setTitle("Address Form", for: .normal)
        button.setTitleColor(.white, for: .normal)
        button.backgroundColor = .red
        button.layer.cornerRadius = 8.0
        button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)

        view.addSubview(button)

        button.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            button.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            button.centerYAnchor.constraint(equalTo: view.centerYAnchor),
            button.widthAnchor.constraint(equalToConstant: 200),
            button.heightAnchor.constraint(equalToConstant: 50)
        ])
    }
}

private extension AddressDemoViewController {
    @objc func buttonTapped() {
        delegate?.addressDemoViewControllerDidTap(self)
    }
}
0

There are 0 best solutions below