Skip to content

Files

Latest commit

290b7c7 · May 11, 2016

History

History
187 lines (147 loc) · 3.12 KB

Readme.md

File metadata and controls

187 lines (147 loc) · 3.12 KB

Build Status

RxSwift+Ext

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.

Installation

CocoaPods

use_frameworks!
pod "RxSwift-Ext"

Carthage

Add this to your Cartfile

github "RxSwiftCommunity/RxSwift-Ext"

Operators

RxSwift+Ext is all about adding operators to RxSwift! Currently available operators:

unwrap

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

Ignore specific elements.

  Observable<String>
    .of("One","Two","Three")
    .ignore("Two")
    .subscribe { print($0) }
Next(One)
Next(Three)
Completed  
ignoreWhen

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
once

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
distinct

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
mapTo

Replace every element with the provided value.

Observable.of(1,2,3)
    .mapTo("Nope.")
    .subscribe { print($0) }
Next(Nope.)
Next(Nope.)
Next(Nope.)
Completed
not

Negate booleans.

Observable.just(false)
    .not()
    .subscribe { print($0) }
Next(true)
Completed
cascade

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)

License

This library belongs to RxSwiftCommunity.

RxSwift+Ext is available under the MIT license. See the LICENSE file for more info.