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.