If you're using RxSwift, you may have encountered situations where the built-in operators do not bring the exact functionality you want. The RxSwift core is being intentionally kept as compact as possible to avoid bloat. This repository's purpose is to provide additional convenience operators.
use_frameworks!
pod "RxSwiftExt"
Add this to your Cartfile
github "RxSwiftCommunity/RxSwiftExt"
RxSwiftExt is all about adding operators to RxSwift! Currently available operators:
Unwrap optionals and filter out nil values.
Observable.of(1,2,nil,Int?(4))
.unwrap()
.subscribe { print($0) }
Next(1)
Next(2)
Next(4)
Ignore specific elements.
Observable<String>
.of("One","Two","Three")
.ignore("Two")
.subscribe { print($0) }
Next(One)
Next(Three)
Completed
Ignore elements according to closure.
Observable<Int>
.of(1,2,3,4,5,6)
.ignoreWhen { $0 > 2 && $0 < 6 }
.subscribe { print($0) }
Next(1)
Next(2)
Next(6)
Completed
Send a next element exactly once to the first subscriber that takes it. Further subscribers get an empty sequence.
let obs = Observable.once("Hello world")
print("First")
obs.subscribe { print($0) }
print("Second")
obs.subscribe { print($0) }
First
Next(Hello world)
Completed
Second
Completed
Pass elements through only if they were never seen before in the sequence.
Observable.of("a","b","a","c","b","a","d")
.distinct()
.subscribe { print($0) }
Next(a)
Next(b)
Next(c)
Next(d)
Completed
Replace every element with the provided value.
Observable.of(1,2,3)
.mapTo("Nope.")
.subscribe { print($0) }
Next(Nope.)
Next(Nope.)
Next(Nope.)
Completed
Negate booleans.
Observable.just(false)
.not()
.subscribe { print($0) }
Next(true)
Completed
Sequentially cascade through a list of observable, dropping previous subscriptions as soon as an observable further down the list starts emitting elements.
let a = PublishSubject<String>()
let b = PublishSubject<String>()
let c = PublishSubject<String>()
Observable.cascade([a,b,c])
.subscribe { print($0) }
a.onNext("a:1")
a.onNext("a:2")
b.onNext("b:1")
a.onNext("a:3")
c.onNext("c:1")
a.onNext("a:4")
b.onNext("b:4")
c.onNext("c:2")
Next(a:1)
Next(a:2)
Next(b:1)
Next(c:1)
Next(c:2)
This library belongs to RxSwiftCommunity.
RxSwiftExt is available under the MIT license. See the LICENSE file for more info.