RxBaseViewController

RxBaseViewController 기본 구조

public class RxBaseViewController<VM: BaseViewBindable>: UIViewController 

BaseViewBindable 이라는 타입을 을 필요로 함 여기서 PublishRelay 라는걸 사용하는데, Relay 란걸 먼저 보자

Relay

RxSwift 의 Subject 는 .onCompleted, .onError 등의 이벤트가 발생하면 subscribe 가 종료되고 .onNext 를 통해 이벤트를 전달한다

반면에, RxCocoa 의 Relay 는 Dispose 되기 전까지 .accept 를 통해 이벤트를 전달한다

Relay 에는, Subject 와 비슷하게, PublishRelay 와 BehaviorRelay 가 있는데, 이 두 가지는 PublishSubject 와 BehaviorSubject 와 유사

RxBaseViewController 의 bind()

BaseViewModelviewDidLoad ~ serverFailOutput 까지를 RxBaseViewController 에서 bind 해둠

func bind(viewModel: VM) {
    self.viewModel = viewModel

    rx.methodInvoked(#selector(UIViewController.viewDidLoad))
        .map { _ in () }
        .bind(to: viewModel.viewDidLoad)
        .disposed(by: disposeBag)

    // ...
}

여기서는 methodInvoked() 라는 메소드가 사용되는데, 이에 대해 알아보자