ReplaySubject & AsyncSubject

hzw94·2021년 5월 5일
0

RxSwift

목록 보기
5/10

ReplaySubject

두개 이상의 이벤트를 저장하고 새로운 구독자에게 전달하기 위해 ReplaySubject가 사용된다.

먼저 어떻게 생성하는지 코드로 한번 보자.

let rs = ReplaySubject<Int>.create(bufferSize: 3)

rs상수에 ReplaySubject는 위와 같이 생성할수 있다. 특이한 점이 하나 있다면 BufferSize를 지정해두는 것인데, 몇가지를 저장할지 지정한다.

ReplaySubject는 지정된 버퍼 크기만큼 최신 이벤트를 저장하고 최신 구독자들에게 이를 전달한다.

버퍼는 메모리의 사용량이다. 필요이상의 크기를 사용하면 해저드가 발생하니 주의하도록하자.

AsyncSubject

지금까지 공부해왔던 Subject들과는 이벤트 전달 시점에 있어 차이가 있다.
보통은 Subject로 이벤트가 전달되면 즉시 구독자에게 이를 전달하는데, AsyncSubject는 Completed 이벤트가 전달되기 전까지 어떠한 이벤트도 구독자에게 전달하지않는다.

생성은 다음과 같이 한다.

let subject = AsyncSubject<Int>()

또 아래의 코드를 써서 playground에서 동작시켜보면 앞서 했던 얘기가 어떠한것인지 알게될것이다.

subject.subscribe {
    print($0)
}.disposed(by: bag)
//구독자에게 전달 X
subject.onNext(1)
// 구독자에게 전달X
subject.onNext(2)
//전달 X
subject.onNext(3)
// 가장 마지막Next Event랑 Completed와 같이 전달됌
//subject.onCompleted()

또한 에러 이벤트는 에러 이벤트 단 한개만 전달이된다.
기존에 전달하려했던 이벤트들은 모두 전달되지 않게 된다.

profile
볼가놈의 iOS & Swift & RxSwift & PS 저장창고

0개의 댓글