RxSwift, Multicast에서 Share까지

[RxSwift] Share(replay:)

refCount


RefCount Observable

let bag = DisposeBag()
let source = Observable<Int>
	.interval(.seconds(1), scheduler: MainScheduler.instance)
	.debug()
	.publish()
	.refCount()

let observer1 = source
   .subscribe { print("🔵", $0) }

// 내부에서 connect를 자동으로 호출하기 때문에 필요가 없다.
// source.connect()

// 이 시점에 다른 구독자가 없기 때문에 disposed
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
   observer1.dispose()
}

// 다시 시작하기 때문에 0부터 출력
DispatchQueue.main.asyncAfter(deadline: .now() + 7) {
   let observer2 = source.subscribe { print("🔴", $0) }
   
   // 이 때도 구독자가 취소되어 없기 때문에 dispose
   DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
      observer2.dispose()
   }
}

refCount 연산자를 사용하면 ConncetableObservable을 직접 관리할 필요가 없다. connect도 직접 호출하고 필요한 시점에 dispose도 자동으로 관리한다.