let replaySubject = ReplaySubject<Int>.create(bufferSize: 3)
// 3개의 마지막 이벤트를 저장

ReplaySubject는 마지막으로 전달된 n개의 이벤트를 버퍼에 저장한다.
[1,2,3,4,5,6,7,8,10].forEach {
replaySubject.onNext($0)
}
replaySubject.subscribe {
print("ReplaySubject 1", $0)
}
.disposed(by: disposeBag)
// Output
ReplaySubject 1 next(8)
ReplaySubject 1 next(9)
ReplaySubject 1 next(10)
마지막 3개의 이벤트를 저장했기 때문에 Subscriber가 추가되자마자 10개 중 마지막 3개의 이벤트가 전달되었다.
replaySubject.subscribe {
print("ReplaySubject 2", $0)
}
.disposed(by: disposeBag)
// Output
ReplaySubject 2 next(8)
ReplaySubject 2 next(9)
ReplaySubject 2 next(10)
새로운 다른 Subscriber가 추가되어도 마찬가지로 마지막으로 저장된 이벤트를 전달한다.
replaySubject.onNext(11)
replaySubject.subscribe {
print("ReplaySubject 3", $0)
}
.disposed(by: disposeBag)
// Output
ReplaySubject 1 next(11)
ReplaySubject 2 next(11)
ReplaySubject 3 next(9)
ReplaySubject 3 next(10)
ReplaySubject 3 next(11)
replaySubject.onCompleted()
// Output
ReplaySubject 1 completed
ReplaySubject 2 completed
ReplaySubject 3 completed
새로운 이벤트의 추가
replaySubject.subscribe {
print("ReplaySubject 4", $0)
}
.disposed(by: disposeBag)
// Output
ReplaySubject 4 next(9)
ReplaySubject 4 next(10)
ReplaySubject 4 next(11)
ReplaySubject 4 completed
Output 로그를 보면, 버퍼에 저장하고 전달하는 이벤트는 onNext 이벤트라는 것을 알 수 있다.
항목이 많아질 경우에 순서와 지연이 중요한 항목들이 있다면 사용에 주의해야한다.
'iOS > RxSwift' 카테고리의 다른 글
[RxSwift] Relay (0) | 2022.09.17 |
---|---|
[RxSwift] Subject - AsyncSubject (0) | 2022.09.17 |
[RxSwift] Subject - BehaviorSubject (0) | 2022.09.15 |
[RxSwift] Subject - PublishSubject (0) | 2022.09.14 |
[RxSwift] Observable, Observer, Operators (0) | 2022.09.14 |