[RxSwift] Relay

jinny·2022년 10월 13일
1

RxSwift

목록 보기
2/10
post-thumbnail

Relay


📚 개념

  • onNext() event를 방출할 뿐, complete를 방출하지 않는다.
  • error를 방출하지 않는다.
  • 동일한 Subject의 wrapper class이며, 같은 동작을 한다.
  • RxCocoa 설치를 통해 사용이 가능하다.
  • 종류로는 PublishRelay, BehaviorRelay, ReplayRelay가 있다.

🏷 참고 사이트






PublishRelay


📚 개념

  • PublishSubject의 wrapper class이다.
  • default value가 필요하지 않고, 구독 이후에 항목을 방출한다.

✏️ 예시) PublishRelay 사용방법

// 실행코드
let disposeBag = DisposeBag()
let relay = PublishRelay<String>()

relay.accept("Item 1")

relay.asObservable()
    .subscribe {
        print($0)
}

relay.accept("Item 2")
// 결과
next(Item 2)

🏷 참고 사이트






BehaviorRelay


📚 개념

  • BehaviorSubject의 wrapper class이다.
  • RxSwift에서 제외된 Variables를 대신하여 사용한다.
  • default value를 지정해줘야 하며, 구독하면 가장 최근의 항목이나 default value를 시작으로 방출한다.

✏️ 예시) BehaviorRelay 사용방법

// 실행코드
let disposeBag = DisposeBag()
let relay = BehaviorRelay(value: ["Item 1"])

var value = relay.value
value.append("Item 2")
value.append("Item 3")
relay.accept(value)

//relay.accept(["Item 2"])
//relay.accept(relay.value + ["Item 3"] )

relay.asObservable()
    .subscribe {
        print($0)
}
// 결과
next(["Item 1", "Item 2", "Item 3"])

🏷 참고 사이트






ReplayRelay

📚 개념

  • ReplaySubject의 wrapper class이다.
  • 재생버퍼의 크기만큼 event를 방출한다.
// 실행코드
let disposeBag = DisposeBag()
let relay = ReplayRelay<String>.create(bufferSize: 2)

relay.accept("Issue 1")
relay.accept("Issue 2")
relay.accept("Issue 3")

relay.subscribe {
    print($0)
}

relay.accept("Issue 4")

print("[Subscription 1]")

relay.subscribe {
    print($0)
}

relay.accept("Issue 5")
relay.accept("Issue 6")

print("[Subscription 2]")

relay.subscribe {
    print($0)
}
// 결과
next(Issue 2)
next(Issue 3)
next(Issue 4)
[Subscription 1]
next(Issue 3)
next(Issue 4)
next(Issue 5)
next(Issue 5)
next(Issue 6)
next(Issue 6)
[Subscription 2]
next(Issue 5)
next(Issue 6)

🏷 참고 사이트



💥 공부를 위한 정리글이기 때문에 잘못된 부분이 있을 수 있습니다. 💥

profile
우당탕탕 지니

0개의 댓글