LoginViewController
bindViewModel()
override func bindViewModel() {
super.bindViewModel()
guard let viewModel = viewModel as? LoginViewModel else { return }
let segmentSelected = Observable.of(segmentedControl.segmentSelection.map { LoginSegments(rawValue: $0)! }).merge()
let input = LoginViewModel.Input(segmentSelection: segmentSelected.asDriverOnErrorJustComplete(),
basicLoginTrigger: basicLoginButton.rx.tap.asDriver(),
oAuthLoginTrigger: oAuthLoginButton.rx.tap.asDriver())
let output = viewModel.transform(input: input)
...
protocol ViewModelType
protocol ViewModelType {
associatedtype Input
associatedtype Output
func transform(input: Input) -> Output
}
LoginViewModel
Input / Output
struct Input {
let segmentSelection: Driver<LoginSegments>
let basicLoginTrigger: Driver<Void>
let oAuthLoginTrigger: Driver<Void>
}
struct Output {
let basicLoginTriggered: Driver<Void>
let oAuthLoginTriggered: Driver<Void>
let basicLoginButtonEnabled: Driver<Bool>
let hidesBasicLoginView: Driver<Bool>
let hidesOAuthLoginView: Driver<Bool>
}
댓글