Skip to content

Instantly share code, notes, and snippets.

@ha1f
Last active November 29, 2019 10:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ha1f/b61255f30de98ee11025648aecbd5c16 to your computer and use it in GitHub Desktop.
Save ha1f/b61255f30de98ee11025648aecbd5c16 to your computer and use it in GitHub Desktop.
final class LazyBehaviorRelay<Element>: ObservableType, ObserverType {
private let _behaviorRelay = BehaviorRelay<Element?>(value: nil)
private let _emittedValue: Observable<Element>
init() {
_emittedValue = _behaviorRelay
.filterNil()
.share(replay: 1, scope: .forever)
}
/// Current value of behavior subject
public var value: Element? {
return _behaviorRelay.value
}
func accept(_ event: Element) {
_behaviorRelay.accept(event)
}
// MARK: - ObservableType
func subscribe<Observer>(_ observer: Observer) -> Disposable where Observer: ObserverType, Element == Observer.Element {
_emittedValue.subscribe(observer)
}
// MARK: - ObserverType
func on(_ event: RxSwift.Event<Element>) {
switch event {
case let .next(value):
_behaviorRelay.accept(value)
case .error, .completed:
break
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment