[RxSwift] AirPortClone: UITableViewCell & AirportViewModel

Junyoung Park·2022년 12월 28일
0

RxSwift

목록 보기
19/25
post-thumbnail
post-custom-banner

#7 UITableViewCell Binding using AirportViewModel - RxSwift MVVM Coordinator iOS App

AirPortClone: UITableViewCell & AirportViewModel

구현 목표

  • 커스텀 테이블 뷰 셀 구현

구현 태스크

  • 테이블 뷰 셀 구현
  • UI 바인딩 함수 구현
  • 뷰 모델 구현

핵심 코드

protocol AirportViewPresentable {
    var name: String { get }
    var code: String { get }
    var address: String { get }
    var distance: Double? { get }
    var formattedDistance: String { get }
    var runwayLength: String { get }
    var location: (lat: String, lon: String) { get }
}
  • 뷰 모델이 따를 프로토콜
extension AirportViewModel {
    init(model: AirportModel) {
        self.name = model.name
        self.code = model.code
        self.address = "\(model.state ?? ""), \(model.country)"
        self.runwayLength = "Runway Length: \(model.runwayLength ?? "NA")"
        self.location = (lat: model.lat, lon: model.lon)
        self.distance = 0
    }
}
  • 데이터 모델을 파라미터로 받아 해당 프로토콜의 값을 이니셜라이즈하는 뷰 모델
func configure(with model: AirportViewModel) {
        nameLabel.text = model.name
        distanceLabel.text = model.formattedDistance
        countryLabel.text = model.address
        lengthLabel.text = model.runwayLength
    }
  • 해당 뷰 모델을 통해 UI를 그리는 configure 함수

    강의의 주요 태스크는 _view_presentable이라는 프로토콜을 만든 뒤, 해당 프로토콜을 따르는 구조체(!)를 뷰 모델로 설정, 해당 뷰 모델을 통해 뷰 컨트롤러의 데이터를 담당하는 것인데, 과연 기존의 클래스를 직접 뷰 모델로 넣는 것과 무엇이 다른 것인지, 그저 프로토콜 지향 프로그래밍의 일종인 것인지 궁금하다.

profile
JUST DO IT
post-custom-banner

0개의 댓글