【Swift】MVP


MVP

Model :

ビジネスロジック、データ処理(内部ロジック)、純粋なドメインロジック

View :

表示と入出力処理、描画、イベント通知

Presenter :

Model操作、View更新、表示用のデータ保持

JournalsModel.swift

protocol JournalsModelInput {
}

class JournalsModel: JournalsModelInput {

}

JournalsViewController.swift

class JournalsViewController: UIViewController {

    private var presenter: JournalsPresenterInput!

    func inject(presenter: JournalsPresenterInput) {
        self.presenter = presenter
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        presenter = JournalsPresenter.init(view: self, model: JournalsModel())
        inject(presenter: presenter)
        
        presenter.viewDidLoad()
    }
}

extension JournalsViewController: JournalsPresenterOutput {

    func setupViewForViewDidLoad() {
    }
}

JournalsPresenter.swift

protocol JournalsPresenterInput {
}

protocol JournalsPresenterOutput: AnyObject {
}

final class JournalsPresenter: JournalsPresenterInput {

    private weak var view: JournalsPresenterOutput!
    private var model: JournalsModelInput
    
    init(view: JournalsPresenterOutput, model: JournalsModelInput) {
        self.view = view
        self.model = model
    }

    func viewDidLoad() {
        view.setupViewForViewDidLoad()
    }
}