본문 바로가기
iOS/RxSwift

[RxSwift] Relay

by 최지철 2023. 10. 29.
728x90
반응형

Relay

  • Relay는 Subject와 유사한 특징을 갖고있으며, 내부에 Subject를 맵핑하고있다.
  • Relay는 RxCocoa에서 제공하는 기능이다.
  • Subject와 유사하게 이벤트를 받아 구독자에게 전달한다.
  • 차이점은 Next 이벤트만 전달한다. completed와 error는 받지도, 전달하지도 않는다.
  • 구독자가 dispose되기 전까지, 계속 이벤트를 처리한다. 그래서 주로UI이벤트에 많이 사용된다.
  • Relay에게 전달할때는 accept 를 사용

PublishRelay

  • 빈 생성자로 PublishSubject와 동일하게 생성한다. 아래처럼 동일하게 구독하고 이벤트를 전달하면 된다.
let pr = PublishRelay<Int>()
pr.subscribe { print("1: \($0)") }
	disposed(by: disposeBag)
pr.accept(1)

BehaviorRelay

  • BehaviorSubject와 마찬가지로 하나의 값을 생성자로 전달한다.
  • BehaviorRelay의 특징! 중 하나가 value라는 속성에 접근해서 저장하고 있는 값을 리턴받을 수 있다.
  • 읽기 전용이고 저장되어 있는 값을 바꾸지는 못한다.
  • 새로운 값으로 바꾸고 싶다면 accept 메소드를 사용해 새로운 값을 전달하면 된다.
let br = BehaviorRelay<Int>(value: 0)
br.subscribe { print("1: \($0)") }
	disposed(by: disposeBag)
br.accept(1)

ReplayRelay

let rrealy = ReplayRelay<Int>.create(bufferSize: 3)

(1 ... 10).forEach { rrealy.accept($0) }

rrealy.subscribe { print("rrealy: \($0)") }
	.disposed( by: disposebag())
    
    //rrealy: next(8)
    //rrealy: next(9)
    //rrealy: next(10)
     //출력
  • RxSwift 6 이후 부터 나오기 시작했다.
  • ReplaySubject와 마찬가지로 버퍼의 크기를 정해주어야한다.
728x90
반응형

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

[RxSwift] Create Operators [2]  (0) 2023.10.30
[RxSwift] Create Operators [1]  (0) 2023.10.29
[RxSwift] Subject  (0) 2023.10.29
[RxSwift] Disposable  (0) 2023.09.14
[RxSwift] Observable  (0) 2023.09.14