iOS/RxSwift
[RxSwift] Relay
Relay도 Subject처럼 다른 Observable로부터 이벤트를 받아서 Subscriber로 전달할 수도 있다. Observable인 동시에 Observer이다. PublishRelay: PublishSubject Wrapping BehaviorRelay: BehaviorSubject Wrapping ReplayRelay: ReplaySubject Wrapping (RxSwift 6+) Next 이벤트만 받고 Error와 Completed 이벤트는 받지 않는다. 주로 종료없이 계속 전달되는 이벤트 Sequence를 처리할 때 활용한다. Next 이벤트만 다룬다. Error와 Completed 이벤트는 전달받지도 전달하지도 않는다. 그렇기 때문에 종료되지 않는다. Subscriber가 Dispose되..
![[RxSwift] Subject - AsyncSubject](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHC5Ji%2FbtrL5R4JDfa%2FId0hhXeaRdnz0yJDOqxVQ1%2Fimg.png)
[RxSwift] Subject - AsyncSubject
let asyncSubject = AsyncSubject() Completed 이벤트가 전달되었을때 마지막 Next 이벤트를 Subscriber에게 전달한다. asyncSubject .subscribe { print("AsyncSubject 1", $0) } .disposed(by: disposeBag) asyncSubject.onNext(1) asyncSubject.onNext(3) asyncSubject.onNext(5) Completed 이벤트가 없기 때문에 Subscriber에게 이벤트가 전달되지 않는다. asyncSubject.onNext(4) asyncSubject.onError(MyError.error) // Output AsyncSubject 1 next(4) AsyncSubject 1 c..
![[RxSwift] Subject - ReplaySubject](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVxcQL%2FbtrL6Q5x3W1%2FpakIkKHSo59gk3J3gqZTY1%2Fimg.png)
[RxSwift] Subject - ReplaySubject
let replaySubject = ReplaySubject.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개의 ..
![[RxSwift] Subject - BehaviorSubject](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuALQp%2FbtrL80s16fb%2FeKkKuwl8j23bZrgoALtME1%2Fimg.png)
[RxSwift] Subject - BehaviorSubject
PublishSubject와의 차이점 let publishSubject = PublishSubject() publishSubject.subscribe { print("PublishSubject >>", $0) } .disposed(by: disposeBag) 위 코드는 Observer가 Subscribe한 이후 전달되는 이벤트가 없기 때문에 print가 호출되지 않는다. BehaviorSubject는 구독 시점에 가장 최근에 배출된 항목을 배출한다. let behaviorSubject = BehaviorSubject(value: 0) behaviorSubject.subscribe { print("BehaviorSubject 1", $0) } .disposed(by: disposeBag) // Output..
![[RxSwift] Subject - PublishSubject](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMJMuW%2FbtrL4mqCwhc%2FshI8UGO3C4mWtgcYfQ5dsk%2Fimg.png)
[RxSwift] Subject - PublishSubject
Observable은 다른 Observable를 Subscribe하지 못하고, Observer는 다른 Observer로 이벤트를 전달하지 못한다. Subject는 다른 Observable로 부터 이벤트를 받아서 Subscriber로 전달할 수 있다. Observable인 동시에 Observer인 셈이다. Subject의 종류 PublishSubject: Subject로 전달되는 새로운 이벤트를 Subscriber로 전달한다. BehaviorSubject: 생성시점에 시작 이벤트를 지정하고, Subject로 전달되는 이벤트 중에 가장 마지막에 전달된 최신 이벤트를 저장해두었다가 새로운 Subject에게 최신 이벤트를 전달한다. ReplaySubject: 하나 이상의 최신 이벤트를 버퍼에 저장한다. Obse..