Observable의 생성 Operator 마지막 글입니다(아마도).
첫번째 글에서는 just, of, from, range, empty, never 를 정리했고
두번째 글에서는 create를 정리했습니다.
이번에도 이전에 정리한 생성 Operator와 또다른 성격의 defer를 해봅니다.
deferred
defer로 생성된 observable은 다른 생성 operator들과 다르게,
observer가 subscribe를 호출하면 그 때부터 observable을 생성시킵니다.
그래서 defer는 subscribe할 때마다 다른 observable을 생성시키는 Factory를 구현할 수 있습니다.
print("----- deferred -----")
let disposeBag = DisposeBag()
// 반환할 observable을 flip할 플래그
var flip = false
// defer를 사용. Int형 Observable을 반환하는 factory 생성.
let factory: Observable<Int> = Observable.deferred {
// subscribe될 때마다 flip의 toggle이 발생
flip.toggle()
// flip에 따라 다른 observable을 반환
if flip {
return Observable.of(1, 2, 3)
} else {
return Observable.of(4, 5, 6)
}
}
// subscribe
for _ in 0...3 {
factory.subscribe(onNext: {
print($0, terminator: " ")
})
.disposed(by: disposeBag)
print()
}
(출력)
----- deferred -----
1 2 3
4 5 6
1 2 3
4 5 6