UIKit 환경에서 MVP(PassiveView)

suojae·2023년 11월 25일
0

[iOS] 아키텍쳐

목록 보기
10/11

UIKit 환경에서의 패시브뷰 템플릿

  • UI뷰컨은 오로지 UI를 구축하고 화면에 보이는 값을 갱신하는 수동적인 뷰, 이벤트가 발생했을 때는 프리젠터에게 이벤트를 위임한다
  • 프레젠터는 프레젠테이션 상태와 로직을 소유하되 가능한 UI킷에 대한 의존성이 없도록 만들어주는 것이 좋다
  • 뷰에 표시할 특성 상태를 소유하거나 변경한다든지, 뷰로부터 이벤트가 발생했을 때 모델에 어떤 처리가 필요하면 위임하는 작업을 프로토콜로 구현해준다
  • 모델은 모든 비즈니스 로직을 처리하는 공간이다

MVP(Passive View) in UIKit Example

Protocols.swift

import Foundation

protocol PresenterOutput: AnyObject {
    func displayData(_ data: String)
}

protocol PresenterInput {
    var view: PresenterOutput? { get set }
    func updateView()
}

protocol ModelInput {
    func fetchData() -> String
}

Model: DataModel.swift

import Foundation

class DataModel: ModelInput {
    func fetchData() -> String {
        // Fetch and return data
        return "Sample Data"
    }
}

View: DataViewController.swift

import UIKit

class DataViewController: UIViewController, PresenterOutput {
    var presenter: PresenterInput!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Initialize the presenter with the model
        presenter = DataPresenter(model: DataModel())
        presenter.view = self

        // Update view via presenter
        presenter.updateView()
    }
    
    func displayData(_ data: String) {
        // Update your UI with the data
        // For example, display the data in a label
        print(data)
    }
}

Presenter: DataPresenter.swift

import Foundation

class DataPresenter: PresenterInput {
    weak var view: PresenterOutput?
    var model: ModelInput
    
    init(model: ModelInput) {
        self.model = model
    }
    
    func updateView() {
        let data = model.fetchData()
        view?.displayData(data)
    }
}
profile
Hi 👋🏻 I'm an iOS Developer who loves to read🤓

0개의 댓글