[RxSwift] 5-1. Relay 종류
RxSwift를 21일간 공부하는 루틴
"Rx를 기깔나게 쓰는 신입개발자 도전" 시작 🚀
Relay 종류
Relay에는 PublishRelay
, BehaviorRelay
, ReplayRelay
가 있다.
이중 ReplayRelay
는 RxSwift6 에서 추가가 되었다.
relay는 subject를 wrapping 한거라, 주된 동작방식은 비슷하다.
다만 가장 큰 차이점은 completed, error 이벤트를 전달 하지도 받지도 않는다는 점이다.
RxCocoa
relay가 dispose 전까지 종료가 되지 않는 다는 점에서 UI event에 적합하다.
따라서 UIKit 에도 쓸 수 있는 RxCocoa를 import 해줘야 relay를 사용할 수 있다.
Code
이제 코드로 구현해보겠다.
전체코드는 깃허브 에서 확인 가능하다.
PublishRelay
let pl = PublishRelay<String>()
pl.subscribe { print("PublishRelay o1 : \($0)")}
.disposed(by: disposeBag)
pl.accept("a")
PublishSubject는 구독 이후 받은 이벤트를 전달했었다.
마찬가지로 PublishRelay도 구독이후 이벤트를 전달받는다.
따라서 a 이벤트를 전달받아, output은 PublishRelay o1 : next(a)
가 된다.
BehaviorRelay
let bl = BehaviorRelay<String>(value: "a")
bl.accept("b")
bl.subscribe { print("BehaviorRelay o1 : \($0)")}
.disposed(by: disposeBag)
print("BehaviorRelay는 value를 통해 값도 꺼낼수 있다구 : \(bl.value)")
역시, BehaviorSubject 처럼 초기값을 가지고 생성이 된다.
따라서, a를 가지고 생성이되고, b를 발행하게 된다음 구독을 했으므로, 가장 최신이벤트인 b를 전달 받게 된다.
이때, BehaviorRelay의 특징이 하나 있다.
아래 definition을 보면 , value를 통해 현재 값을 뽑아 줄 수 있다.
따라서 bl.value
를 통해 next(b)에서 "b" 를 가져올 수 있다.
ReplayRelay
let rl = ReplayRelay<String>.create(bufferSize: 3)
arr.forEach { rl.accept($0) }
rl.subscribe { print("ReplayRelay o1 : \($0)")}
.disposed(by: disposeBag)
마지막으로 RxSwift6에서 추가된 ReplayRelay에 대해 정리하겠다.
역시나 ReplaySubject 처럼 bufferSize만큼 최신이벤트를 전달한다.
따라서, 아래와 같이 output 이 나온다.
output :
ReplayRelay o1 : next(c)
ReplayRelay o1 : next(d)
ReplayRelay o1 : next(e)
subject 와 relay에 대해 지금까지 공부하고 정리해보았다.
다음번엔, Observable을 통해 들어온 이벤트를 다룰 수 있는 operator에 대해 정리해보겠다.
Author And Source
이 문제에 관하여([RxSwift] 5-1. Relay 종류), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@iammiori/RxSwift-5-1.-Relay-종류저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)