RxSwift(deferred)

작성일

deferred

  • 생성을해서 보내주지만, 옵저버가 구독할 때까지 옵저버블을 생성하지 않고, 각 옵저버에 대해 새로운 옵저브블을 생선한다.

구현

public static func deferred(_ observableFactory: @escaping () throws -> Observable<Element>) 
    -> Observable<Element> {
    Deferred(observableFactory: observableFactory)
}

왜 사용할까?, 사용예시

  • 당장은 필요하지 않지만, 필요한 상황에 구독하여 생성이 필요할 때 사용한다.
  • 네트워크 API에서 결과를 받아와 just처럼 옵저버블을 바로 만들어 주는 경우도 있지만, deferred를 통해 구독전까지 해당 네트워크 요청을 시작하지 않도록 해줄 수 있다.
  • 조건을 걸어서 조건에 따라 다른 값들을 반환해줄 때 사용한다.
    ~~~ var touched = true

let factory = Observable.deferred { touched.toggle()

if touched {
    return Observable.of([1,2,3])
} else {
    return Observable.of([4,5,6])
} }

factory.subscribe(onNext: { print($0) }).disposed(by: disposeBag)

// 123

factory.subscribe(onNext: { print($0) }).disposed(by: disposeBag) // 456 ~~~

  • 구독을 했을 때 옵저버블이 생기기 때문에 사전에 조건을 걸어서 조건에 따라 다른 값들을 반환해줄 수도 있다!