
- MVVM 패턴에서는 뷰모델을 뷰컨트롤러의 속성으로 추가한다.
- 뷰 모델 - 뷰 간 바인딩한다.
- 뷰컨트롤러당 뷰모델 1개 존재
ViewModelBindableType
import UIKit
protocol ViewModelBindableType {
associatedtype ViewModelType
var viewModel: ViewModelType! { get set }
func bindViewModel()
}
extension ViewModelBindableType where Self: UIViewController {
mutating func bind(viewModel: Self.ViewModelType) {
self.viewModel = viewModel
loadViewIfNeeded()
bindViewModel()
}
}
ViewController
import UIKit
import RxSwift
import RxCocoa
import NSObject_Rx
class MemoListViewController: UIViewController, ViewModelBindableType {
@IBOutlet weak var listTableView: UITableView!
@IBOutlet weak var addButton: UIBarButtonItem!
var viewModel: MemoListViewModel!
func bindViewModel() {
viewModel.title
.drive(navigationItem.rx.title)
.disposed(by: rx.disposeBag)
viewModel.memoList
.bind(to: listTableView.rx.items(cellIdentifier: "cell")) { row, memo, cell in
cell.textLabel?.text = memo.content
}
.disposed(by: rx.disposeBag)
}
override func viewDidLoad() {
super.viewDidLoad()
}
}