Data Binding in MVVM
Youngminah opened this issue · 0 comments
Youngminah commented
MVVM
- View는 View Model을 가지고, View Model은 Model을 가집니다.
- View Model은 입출력을 처리하고 UI가 요구하는 비지니스 로직을 처리하는 역할만 가집니다.
- View Model은 UI를 수정할 수 없습니다.
비지니스 로직 : 유저 눈에는 보이지 않지만, 유저가 바라는 결과물을 올바르게 도출할 수 있도록 짜여진 코드
Observable을 통한 데이터 바인딩
class Observable<T> {
var value: T { didSet { listener?(value) } }
private var listener: ((T) -> Void)?
init(_ value: T) {
self.value = value
}
func bind(_ closure: @escaping (T) -> Void) {
closure(value)
listener = closure
}
}
ViewModel
class ViewModel {
var username = Observable("고래밥")
var password = Observable("")
}
ViewController
class ViewController {
override func viewDidLoad() {
viewmodel.username.bind { text in
self.mainView.usernameTextField.text = text
}
viewmodel.password.bind { text in
self.mainView.passwordTextField.text = text
}
}
@objc func passwordTextFieldDidChange(_ textfield: UITextField) {
viewmodel.password.value = textfield.text ?? ""
}
@objc func usernameTextFieldDidChange(_ textfield: UITextField) {
viewmodel.username.value = textfield.text ?? ""
}
}