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.

https://reactivex.io/documentation/operators/defer.html

반응형