Skip to content

Instantly share code, notes, and snippets.

@omochi
Created March 13, 2018 05:50
Show Gist options
  • Save omochi/37a18554f3518a046daefce9ff001123 to your computer and use it in GitHub Desktop.
Save omochi/37a18554f3518a046daefce9ff001123 to your computer and use it in GitHub Desktop.
import RxSwift
import RxCocoa
public final class LateInitBehaviorRelay<Element>: ObservableType {
public typealias E = Element
private let _relay: BehaviorRelay<Element?>
public func accept(_ event: Element) {
_relay.accept(event)
}
public var value: Element {
guard let value = _relay.value else {
fatalError("value is not initialized")
}
return value
}
public init() {
_relay = BehaviorRelay<Element?>(value: nil)
}
public func subscribe<O: ObserverType>(_ observer: O) -> Disposable where O.E == E {
return asObservable().subscribe(observer)
}
public func asObservable() -> Observable<Element> {
return _relay.filter { $0 != nil }.map { $0! }
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment