RxSwift에서 swizzling을 통해 특정 메서드의 호출 전, 후에 대한 이벤트를 구독할 수 있다.
public func sentMessage(_ selector: Selector) -> Observable<[Any]>
public func methodInvoked(_ selector: Selector) -> Observable<[Any]>
- sentMessage: 메서드가 호출되기 전
- methodInvoked: 메서드가 호출된 후에 실행
extension Reactive where Base: UIViewController{
var viewDidLoad: ControlEvent<Void> {
let source = self.methodInvoked(#selector(Base.viewDidLoad)).map { _ in }
return ControlEvent(events: source)
}
}
methodInvokded는 RxSwift에서 제공하는 메서드 중 하나로, 주어진 selector에 해당하는 메서드가 호출될 때 마다 Observable을 발생시킨다.
Selector로 전달된 Base타입(여기선 UIViewController)의 viewDidLoad 메서드를 나타낸다.
따라서 viewDidLoad가 호출되는 시점에 이벤트가 발생되도록 구현되어있고, ControlEvent<Void>를 리턴하고있다.
이를 통해 UIViewController의 viewDidLoad를 RxSwift로 구독(subscribe)하거나, 다른 Observable과 조합할 수 있다.