BehaviorRelay 가 subscribe사용이 가능한 이유
BehaviorRelay 가 subscribe사용이 가능한 이유
BehaviorRelay는 내부적으로 BehaviorSubject를 감싸고 있기 때문이다.
BehaviorRelay는 Relay 타입이지만, 내부적으로BehaviorSubject를 사용하여 동작BehaviorSubject는 Observable 프로토콜을 준수하므로,subscribe를 사용 가능
즉, BehaviorRelay 자체가 Observable을 래핑한 형태이기 때문에 구독(subscribe) 가능
내부 구조
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public final class BehaviorRelay<Element>: ObservableType {
private let subject: BehaviorSubject<Element>
public var value: Element {
return try! subject.value()
}
public init(value: Element) {
subject = BehaviorSubject(value: value)
}
public func accept(_ event: Element) {
subject.onNext(event)
}
public func subscribe<Observer: ObserverType>(_ observer: Observer) -> Disposable where Observer.Element == Element {
return subject.subscribe(observer)
}
}
BehaviorRelay내부에BehaviorSubject(subject)가 있음subscribe를 호출하면 내부적으로BehaviorSubject의subscribe를 실행- 즉,
BehaviorRelay자체가ObservableType을 준수하기 때문에 구독 가능
예제 코드 - Subscribe 사용
1
2
3
4
5
6
7
8
9
10
11
12
13
import RxSwift
import RxRelay
let disposeBag = DisposeBag()
let relay = BehaviorRelay(value: "초기값")
// 구독 (내부적으로 BehaviorSubject의 subscribe 호출)
relay.subscribe { print("구독된 값: \($0)") }
.disposed(by: disposeBag)
// 새로운 값 전달
relay.accept("새로운 값")
This post is licensed under CC BY 4.0 by the author.