본문 바로가기
Design Patterns/MVVM

SwiftHub Login ViewController / ViewModel 분석

by 탄이. 2020. 6. 17.

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>
}

댓글