- onNext() event를 방출할 뿐, complete를 방출하지 않는다.
- error를 방출하지 않는다.
- 동일한 Subject의 wrapper class이며, 같은 동작을 한다.
- RxCocoa 설치를 통해 사용이 가능하다.
- 종류로는 PublishRelay, BehaviorRelay, ReplayRelay가 있다.
- PublishSubject의 wrapper class이다.
- default value가 필요하지 않고, 구독 이후에 항목을 방출한다.
// 실행코드
let disposeBag = DisposeBag()
let relay = PublishRelay<String>()
relay.accept("Item 1")
relay.asObservable()
.subscribe {
print($0)
}
relay.accept("Item 2")
// 결과
next(Item 2)
- BehaviorSubject의 wrapper class이다.
- RxSwift에서 제외된 Variables를 대신하여 사용한다.
- default value를 지정해줘야 하며, 구독하면 가장 최근의 항목이나 default value를 시작으로 방출한다.
// 실행코드
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"])
- 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)
💥 공부를 위한 정리글이기 때문에 잘못된 부분이 있을 수 있습니다. 💥