ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • RxSwift Observable, Subjects and Relays
    Swift/RxSwift 2022. 10. 1. 23:57

     

    Subject

    Observable 이면서 observer 일 수 있음.

    (== 데이터를 방출 (emit), 구독 (subscribe) 할 수 있음. ) 

     

    PublishSubject: empty 로 시작해서 subscribers 에게만 새로운 elements 를 emit 

    BehaviorSubject: 초기값을 가짐. 초기 값 또는 가장 최근 element 를 new subscribers 에게 emit 해줌(replay)

    ReplaySubject: buffer size 만큼 초기화 되고, 해당 size 만큼의 element 를 지니고 있다가 new subscribers 에게 emit 

    AsyncSubject: subject 가 complete event 를 받을 때만 가장 마지막 next event 값을 emit. (거의 사용하지 않음)

     

     

    Relay

    PublishRelay, BehaviorRelay: 각각 wrap PublishSubject, BejaviorSubject. Next events 를 accept, relay 만 할 수 있음. 

    Relay 에 대해서 completed, error event 를 넣어줄 수는 없음. 그러므로 끝나지 않는 sequences 상황에서 매우 유용함. 

     

     

     

     

    ----------------------------------------------------------------------------------------------------------------------

     

     

     

    PublishSubject

    Subscribe 한 시점 부터 unsubscribe 또는 complete, error 로 끝날때 까지

    새로운 event 에 대해 notified 받기를 원할 때 사용하기 유용함.

     

    How Publish Subject works

     

    1번째 Line 은 Publish Subject, 2,3 번째 Line 은 Subscribers.

    또한 위로 향하는 화살표는 'subscription' 을, 아래로 향하는 화살표는 'emitting event'. 이다.

     

    event 1 이 추가 된 후 두번째 line 이 subscription 했을 때, publish subject 는 아무런 값도 방출하지 않는다.

    대신, 그 후 event 2 가 추가되었을 때 두번째 line 에게 event 2 를 방출한다.

     

     

    BehaviorSubject

    PublishSubject 와 비슷하게 작동하지만, 가장 최근에 추가한 값 새로운 subscribers 에게 emit 한다는 점에서 큰 차이가 있다. 

     

    How Behavior Subject works

    위 PublishSubject 에서와 화살표, Lines 의 의미는 동일하다.

    다만, 이때는 두번째 Line 이 Subscription 했을 때 즉시 초기 값 event 1 을 emit 한다는 것,

    동일하게 세번째 Line 이 Subscription 했을 때 즉시 가장 최근 값 event 2 을 emit 한다는 것 이 PublishSubject와 다른 점이다. 

     

     

     

    ReplaySubject

    본인이 원하는 만큼 크기의 buffer 를 이용해서 최근 elements 를 저장 후 새로운 subscriber 에서 방출해준다. 

     

    두번째 Line 은 이미 ReplaySubject 를 Subscription 한 상태이다.

    event 1, 2 가 잇따라 추가된 후, 나중에 세번째 Line 이 Subscription 을 하게되면 (2 이상의 size 를 지정해주었다고 가정) 이전 2개 이벤트가 바로 방출되게 된다.

     

     

     

    Relays 

    위 marble diagrams 에서, 마무리 세로선이 없는 경우를 생각하면 된다. (Error, Complete event 는 일어날 수 없음.)

    'Swift > RxSwift' 카테고리의 다른 글

    ReactorKit 으로 로그인 페이지 만들기  (0) 2022.10.14
    RxAlamofire  (0) 2022.10.03
    UITableView (with RxSwift)  (2) 2022.09.30
    Login Validation (simple..) RxSwift 구현  (0) 2022.09.29
    RxSwift basic test (count 1씩 올리기)  (0) 2022.09.28
Designed by Tistory.