RxSwift
[RxSwift] Deferred
thoonk:
2024. 3. 11. 15:12
반응형
deferred
- 구독자가 구독하기 전까지 옵저버블을 생성을 지연시켜, 구독 시점에 각 구독자 별로 새로운 옵저버블을 생성
- 구독 시점에 항상 Observable 을 생성하므로 최신 데이터를 제공하는 데 사용될 수 있음. (네트워크 요청 등)
구현부
public static func deferred(_ observableFactory: @escaping () throws -> Observable<Element>)
-> Observable<Element> {
Deferred(observableFactory: observableFactory)
}
예시 코드
func createObservable() -> Observable<Double> {
return Observable.just(Date().timeIntervalSince1970)
}
Observable<Int>.interval(.seconds(3), scheduler: MainScheduler.instance)
.take(3)
.flatMap { _ -> Observable<Double> in
return Observable<Double>.deferred { createObservable() }
}
.subscribe(onNext: { value in
print("현재 시간:", value)
})
.disposed(by: disposeBag)
위 코드는 예시 출력을 위해 interval 을 사용했지만, 버튼 탭 동작과 같은 트리거를 이용해서 해당 시점에 원하는 처리를 해줄 수 있음.
부족한 점 피드백해주시면 감사합니다 :)
Ref.
반응형