public class RxBaseViewController<VM: BaseViewBindable>: UIViewController
BaseViewBindable 이라는 타입을 을 필요로 함
여기서 PublishRelay 라는걸 사용하는데, Relay 란걸 먼저 보자
BaseViewBindableRxSwift 의 Subject 는 .onCompleted, .onError 등의 이벤트가 발생하면 subscribe 가 종료되고
.onNext 를 통해 이벤트를 전달한다
반면에, RxCocoa 의 Relay 는 Dispose 되기 전까지 .accept 를 통해 이벤트를 전달한다
Relay 에는, Subject 와 비슷하게, PublishRelay 와 BehaviorRelay 가 있는데, 이 두 가지는 PublishSubject 와 BehaviorSubject 와 유사
bind()BaseViewModel 의 viewDidLoad ~ 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() 라는 메소드가 사용되는데, 이에 대해 알아보자