Skip to content

Instantly share code, notes, and snippets.

@dangthaison91
Last active December 30, 2018 09:36
Show Gist options
  • Save dangthaison91/820d9259d7965f61567361962f378899 to your computer and use it in GitHub Desktop.
Save dangthaison91/820d9259d7965f61567361962f378899 to your computer and use it in GitHub Desktop.
RxSwift - Then
@jamiepinkham
public extension ObservableType {
func then(closure: () -> Observable<E>?) -> Observable<E> {
return then(closure() ?? .empty())
}
func then(@autoclosure(escaping) closure: () -> Observable<E>) -> Observable<E> {
let next = Observable.deferred {
return closure() ?? .empty()
}
return self
.ignoreElements()
.concat(next)
}
}
@c0diq
extension ObservableType {
public func then<U>(_ replacement: Observable<U>) -> Observable<U> {
return Observable.create { observer in
let observerDisposable = CompositeDisposable.init()
let disposable = self.asObservable().subscribe { event in
switch event {
case let .error(error):
observer.onError(error)
case .completed:
_ = observerDisposable.insert(replacement.subscribe(observer))
case .next:
break
}
}
_ = observerDisposable.insert(disposable)
return observerDisposable
}
}
}
@Otbivnoe
Copy link

Hey. Thanks for the snippet! But what is it? - @jamiepinkham oO

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment