RxSwift
RxViewController
motosw3600
2022. 3. 3. 16:24
RxViewController
- UIViewController를 생명주기를 RxSwift와 결합해 사용할 수 있는 라이브러리
- 기존 viewWillAppear, viewDidLoad등 UIViewController의 Lifycyle함수를 쉽게 사용하는 syntax sugar
- devxoul님이 만드신 오픈소스 라이브러리
RxViewController 구현부
RxViewController가 어떻게 구현되어 있는지 확인해보자
#if os(iOS) || os(tvOS)
import UIKit
import RxCocoa
import RxSwift
public extension Reactive where Base: UIViewController {
var viewDidLoad: ControlEvent<Void> {
let source = self.methodInvoked(#selector(Base.viewDidLoad)).map { _ in }
return ControlEvent(events: source)
}
var viewWillAppear: ControlEvent<Bool> {
let source = self.methodInvoked(#selector(Base.viewWillAppear)).map { $0.first as? Bool ?? false }
return ControlEvent(events: source)
}
var viewDidAppear: ControlEvent<Bool> {
let source = self.methodInvoked(#selector(Base.viewDidAppear)).map { $0.first as? Bool ?? false }
return ControlEvent(events: source)
}
var viewWillDisappear: ControlEvent<Bool> {
let source = self.methodInvoked(#selector(Base.viewWillDisappear)).map { $0.first as? Bool ?? false }
return ControlEvent(events: source)
}
var viewDidDisappear: ControlEvent<Bool> {
let source = self.methodInvoked(#selector(Base.viewDidDisappear)).map { $0.first as? Bool ?? false }
return ControlEvent(events: source)
}
...
Reative의 Extension으로 UIViewController를 특정한 Base를 가지고 확장(rx.viewDidLoad로 접근가능)
ControlEvent로 UIViewController의 Lifecycle func을 Observable한 events를 전달
RxViewController의 사용법
self.rx.viewDidLoad
.subscribe(onNext: {
print("viewDidLoad !!")
})
self.rx.viewWillAppear
.subscribe(onNext: {
print("viewWillAppear !!")
})
위의 예제처럼 viewDidLoad나 viewWillAppear에서 수행해야될 부분을 따로 override func없이 rx로 해결할 수 있다는 부분이 좋은 것같다. ex) 화면이 보여지기전에 새로운 데이터를 업데이트할 경우 등등..
출처