ReplaySubject

지정된 버퍼수만큼 최신의 이벤트를 전달받는다. 단 메모리에 데이터가 저장되기 떄문에 이점에 유의해서 사용해야한다.

생성

let rs = ReplaySubject<Int>.create(bufferSize: 3) // 3개의 이벤트를 저장하는 버퍼생성
let rs = ReplaySubject<Int>.create(bufferSize: 3) // 3개의 이벤트를 저장하는 버퍼생성

(1...10).forEach { rs.onNext($0) } // 10개의 이벤트 전달

rs.subscribe { print("Observer 1>>", $0) } // 마지막 3개의 이벤트만받는다.
    .disposed(by: disposeBag)

rs.subscribe { print("Observer 2>>", $0) } // 마지막 3개의 이벤트만받는다.
    .disposed(by: disposeBag)

마지막 3개의 이벤트만 전달받는다.(8, 9, 10)

rs.onNext(11)

rs.subscribe { print("Observer 3>>", $0) } // 마지막 3개의 이벤트만받는다.
    .disposed(by: disposeBag)

새로운 next 이벤트를 전달하는 경우 9, 10, 11을 전달받음

rs.onCompleted() // 3개의 구독자에게 Completed이벤트 전달
rs.onError(MyError.error)

rs.subscribe { print("Observer 4>>", $0) } // 마지막 3개의 이벤트만받는다.
    .disposed(by: disposeBag)

3개의 구독자에게 Completed 이벤트 전달