Skip to content

Instantly share code, notes, and snippets.

@fishkingsin
Created August 7, 2021 06:19
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 fishkingsin/57fe732b781b366b161d63c25bcad661 to your computer and use it in GitHub Desktop.
Save fishkingsin/57fe732b781b366b161d63c25bcad661 to your computer and use it in GitHub Desktop.
Two Rx Steam
import RxSwift
import RxCocoa
func ignoreNil<A>(x: A?) -> Observable<A> {
return x.map { Observable.just($0) } ?? Observable.empty()
}
var stream: BehaviorRelay<String?> = BehaviorRelay(value: nil)
var streamA: BehaviorRelay<String?> = BehaviorRelay(value: nil)
var streamB: BehaviorRelay<String?> = BehaviorRelay(value: nil)
var streamC: BehaviorRelay<String?> = BehaviorRelay(value: nil)
let bag = DisposeBag()
stream
.flatMap(ignoreNil)
.distinctUntilChanged().subscribe(onNext: { stream in
print(stream)
}).disposed(by: bag)
stream
.flatMap(ignoreNil)
.distinctUntilChanged()
.withLatestFrom(
BehaviorRelay.combineLatest(
streamA
.flatMap(ignoreNil)
.distinctUntilChanged(),
streamB
.flatMap(ignoreNil)
.distinctUntilChanged(),
streamC
.flatMap(ignoreNil)
.distinctUntilChanged()
)
)
.subscribe(onNext: { A, B, C in
print(A)
print(B)
print(C)
}).disposed(by: bag)
streamA.accept("A")
streamB.accept("B")
streamC.accept("C")
stream.accept("Trigger")
/* result
Trigger
A
B
C
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment