To run the Example.playground, clone the repo, and run pod install from the Example directory first.
- iOS 9.3+
- Swift 4.x
- Xcode 9+
STDevRxExt is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'STDevRxExt'- Filter Extensions
- Map Extensions
- Cast Extensions
- more coming soon
Allow only true elements from Observable<Bool>:
let disposeBag = DisposeBag()
Observable.of(true, false, false, true, true)
.allowTrue()
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)Output will be:
true
true
true
You can use allowTrue on Bool? as well. In this case nil elements will be ignored:
let disposeBag = DisposeBag()
Observable.of(true, false, nil, true, nil, true)
.allowTrue()
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)Output will be:
true
true
true
If you prefer to allow nil elements as well then you can use allowTrueOrNil like this:
let disposeBag = DisposeBag()
Observable.of(true, false, nil, true, nil, true, false)
.allowTrueOrNil()
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)Output will be:
true
true
true
true
true
You can map every element in sequence with provided value.
let disposeBag = DisposeBag()
Observable.of(1, 5, 7, 8)
.map(to: "ping")
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)Output will be:
ping
ping
ping
ping
You can map every element in sequence by procided Key Path.
let disposeBag = DisposeBag()
let observable = Observable.of(
Book(title: "Twenty Thousand Leagues Under the Sea", author: Author("Jules", "Verne")),
Book(title: "Hamlet", author: Author("William", "Shakespeare")),
Book(title: "Hearts of Three", author: Author("Jack", "London"))
)
observable
.map(at: \.title)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
observable
.map(at: \.author.firstName)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)Output will be:
Twenty Thousand Leagues Under the Sea
Hamlet
Hearts of Three
Jules
William
Jack
You can do downcast elements in sequence using cast(to:).
let disposeBag = DisposeBag()
Observable<CustomStringConvertible>.of("1", "5", "7", "8")
.cast(to: String.self)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)Output will be:
Optional("1")
Optional("5")
Optional("7")
Optional("8")
In order to do force downcast use forceCast(to:) liek this:
let disposeBag = DisposeBag()
Observable<CustomStringConvertible>.of("1", "5", "7", "8")
.forceCast(to: String.self)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)Output will be:
1
5
7
8
In case of downcast exception it will return Observable.error(RxCastError.castFailed).
Allow extension functions can be used on Driver as well, except forceCast(to:).
Tigran Hambardzumyan, tigran@stdevmail.com
Feel free to open issuses with any suggestions, bug reports, feature requests, questions.
We’d be really happy if you sent us links to your projects where you use our component. Just send an email to developer@stdevmail.com And do let us know if you have any questions or suggestion.
STDevRxExt is available under the MIT license. See the LICENSE file for more info.