[RxSwift] 4-4. AsyncSubject

miori·2022년 2월 12일
0

RxSwiftBasic

목록 보기
10/29

RxSwift를 21일간 공부하는 루틴
"Rx를 기깔나게 쓰는 신입개발자 도전" 시작 🚀


리뷰

지금까지 정리했던 subject들은 completed이벤트가 전달되기 전에 구독을 시작했다면 즉시 이벤트가 전달이 되었다.
하지만 오늘 정리할 AsyncSubject는 앞서 정리한 subject들과 이벤트 전달시점이 다르다.

소개

AsyncSubject는 Observable이 완료된 후, 즉 onCompleted 가 전달된 후 가장 최신의 마지막값 1개를 전달한다.

asyncSubject

bufferSize를 파라미터로 지정을 해줬던 BehaviorSubject와 달리 파라미터 없이 생성이 가능하다.

코드

전체코드는 깃헙

let asyncS = AsyncSubject<String>()

arr.forEach { asyncS.onNext($0) }

asyncS.subscribe { print("o1 : \($0)")}

//asyncS.onCompleted() //1
//asyncS.onError(Err.err) //2
print("completed되지 않으면 어떠한 event도 전달안됨") //3
asyncS.subscribe { print("o2 : \($0)")}
  1. 우선 completed 전달 없이 단순히 next 이벤트만 전달했을때
  • 이 경우, print("completed되지 않으면 어떠한 event도 전달안됨") 이 코드가 실행이 된다. asyncSubject는 완료이벤트가 전달이 되어야 가장 최신 이벤트를 전달해주기 때문이다.
  1. asyncS.onCompleted() //1 를 실행했을때,
  • 이 경우, completed가 전달이 되었기 때문에, o1과 o2모두 가장 최신 next 이벤트인 "c"를 받게 된다.
    output을 확인해 보겠다.
// output : 
o1 : next(c)
o1 : completed
o2 : next(c)
o2 : completed

next(c)를 전달 받고,completed도 전달 받은 것을 확인할 수 있다.

  1. asyncS.onError(Err.err) //2 를 실행했을때,
  • 이 경우는 error로 인해 observable이 종료된 경우니까, error를 전달해주게 된다.

다음에는 relay에 대해 알아보도록 하겠다.

profile
iS를 공부하는 miori 입니다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN