diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..c7c69173c --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,15 @@ +#Change Log +All notable changes to this project will be documented in this file. + +--- + +## [2.0](https://github.com/ReactiveX/RxSwift/pull/50) (WIP) + +####Updated + +* Adds `ObservableType` +* Moved from using `>-` operator to protocol extensions +* Change from `disposeBag.addDisposable` to `disposable.addDisposableTo` +* Changes in RxCocoa extensions to enable fluent style + +####Fixed diff --git a/Playgrounds/Introduction.playground/Contents.swift b/Playgrounds/Introduction.playground/Contents.swift index 3298d15ae..1294a2f10 100644 --- a/Playgrounds/Introduction.playground/Contents.swift +++ b/Playgrounds/Introduction.playground/Contents.swift @@ -26,7 +26,7 @@ Creating an Observable is one thing, but if nothing subscribes to the observable example("Empty observable") { let emptyObservable: Observable = empty() - let emptySubscriber = emptyObservable >- subscribe { event in + let emptySubscriber = emptyObservable .subscribe { event in switch event { case .Next(let box): print("\(box.value)") @@ -50,7 +50,7 @@ As you can see, no values are ever sent to the subscriber of an empty observable example("Never observable") { let neverObservable: Observable = never() - let neverSubscriber = neverObservable >- subscribe { _ in + let neverSubscriber = neverObservable .subscribe { _ in print("This block is never called.") } } @@ -64,7 +64,7 @@ example("returnElement/just") { let oneObservable = just(32) let oneObservableSubscriber = oneObservable - >- subscribe { event in + .subscribe { event in switch event { case .Next(let box): print("\(box.value)") @@ -81,15 +81,15 @@ Here we see that the `.Next` event is sent just once, then the `.Completed` even */ /*: -### returnElements +### sequence Now we are getting to some more interesting ways to create an Observable. This function creates an observable that produces a number of values before completing. */ -example("returnElements") { - let multipleObservable/* : Observable */ = returnElements(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) +example("sequence") { + let multipleObservable/* : Observable */ = sequence(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) let multipleObservableSubscriber = multipleObservable - >- subscribe { event in + .subscribe { event in switch event { case .Next(let box): print("\(box.value)") @@ -114,7 +114,7 @@ example("from") { let fromArrayObservable = from([1, 2, 3, 4, 5]) let fromArrayObservableSubscriber = fromArrayObservable - >- subscribe { event in + .subscribe { event in switch event { case .Next(let box): print("\(box.value)") @@ -140,8 +140,8 @@ Up to this point, I have only used the `subscribe` method to listen to Observabl */ example("subscribeNext") { - let nextOnlySubscriber = returnElements(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) - >- subscribeNext { value in + let nextOnlySubscriber = sequence(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) + .subscribeNext { value in print("\(value)") } } @@ -161,11 +161,11 @@ The most common way to reduce a sequence is to apply a filter to it and the most */ example("filter") { - let onlyEvensSubscriber = returnElements(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) - >- filter { + let onlyEvensSubscriber = sequence(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) + .filter { $0 % 2 == 0 } - >- subscribeNext { value in + .subscribeNext { value in print("\(value)") } } @@ -176,9 +176,9 @@ This filter tracks the last value emitted and removes like values. This function */ example("distinctUntilChanged") { - let distinctUntilChangedSubscriber = returnElements(1, 2, 3, 1, 1, 4) - >- distinctUntilChanged - >- subscribeNext { value in + let distinctUntilChangedSubscriber = sequence(1, 2, 3, 1, 1, 4) + .distinctUntilChanged + .subscribeNext { value in print("\(value)") } } @@ -197,9 +197,9 @@ This function will perform a function on each element in the sequence until it i */ example("aggregate") { - let aggregateSubscriber = returnElements(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) - >- aggregate(0, +) - >- subscribeNext { value in + let aggregateSubscriber = sequence(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) + .aggregate(0, +) + .subscribeNext { value in print("\(value)") } } diff --git a/Playgrounds/Introduction.playground/contents.xcplayground b/Playgrounds/Introduction.playground/contents.xcplayground index 5106660a5..a204ba673 100644 --- a/Playgrounds/Introduction.playground/contents.xcplayground +++ b/Playgrounds/Introduction.playground/contents.xcplayground @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/Playgrounds/ObservablesOperators/Observables+Combining.playground/Contents.swift b/Playgrounds/ObservablesOperators/Observables+Combining.playground/Contents.swift index 693e737fd..54a121ca4 100644 --- a/Playgrounds/ObservablesOperators/Observables+Combining.playground/Contents.swift +++ b/Playgrounds/ObservablesOperators/Observables+Combining.playground/Contents.swift @@ -20,11 +20,11 @@ Return an observeble which emits a specified item before emitting the items from example("startWith") { let aggregateSubscriber = from([4, 5, 6, 7, 8, 9]) - >- startWith(3) - >- startWith(2) - >- startWith(1) - >- startWith(0) - >- subscribeNext { int in + .startWith(3) + .startWith(2) + .startWith(1) + .startWith(0) + .subscribeNext { int in print(int) } @@ -47,7 +47,7 @@ xample("combineLatest 1st") { combineLatest(intOb1, intOb2) { "\($0) \($1)" } - >- subscribeNext { + .subscribeNext { print($0) } @@ -79,7 +79,7 @@ est 2nd") { combineLatest(intOb1, intOb2) { $0 * $1 } - >- subscribeNext { + .subscribeNext { print($0) } } @@ -97,7 +97,7 @@ t 3rd") { combineLatest(intOb1, intOb2, intOb3) { ($0 + $1) * $2 } - >- subscribeNext { + .subscribeNext { print($0) } } @@ -117,7 +117,7 @@ The Observable returned by `zip` emits an item only when all of the imputs Obser zip(intOb1, intOb2) { "\($0) \($1)" } - >- subscribeNext { + .subscribeNext { print($0) } @@ -154,7 +154,7 @@ example("zip 2nd") { zip(intOb1, intOb2) { $0 * $1 } - >- subscribeNext { + .subscribeNext { print($0) } } @@ -172,7 +172,7 @@ The next sample shows zip called with three sorce Observables zip(intOb1, intOb2, intOb3) { ($0 + $1) * $2 } - >- subscribeNext { + .subscribeNext { print($0) } } @@ -190,8 +190,8 @@ Combine multiple Observables, of the same type, into one by merging their emissi Subject() let subject2 = PublishSubject() - merge(returnElements(subject1, subject2)) - >- subscribeNext { int in + merge(sequence(subject1, subject2)) + .subscribeNext { int in print(int) } @@ -209,9 +209,9 @@ example("merge 2nd") { let subject1 = PublishSubject() let subject2 = PublishSubject() - returnElements(subject1, subject2) - >- merge(maxConcurrent: 2) - >- subscribeNext { int in + sequence(subject1, subject2) + .merge(maxConcurrent: 2) + .subscribeNext { int in print(int) } @@ -241,28 +241,25 @@ Convert an Observable that emits Observables into a single Observable that emits let var3 = Variable(var1 as Observable) let d = var3 - >- switchLatest - >- subscribeNext { (e: Int) -> Void in + .switchLatest + .subscribeNext { (e: Int) -> Void in print("\(e)") } - var1.next(1) - var1.next(2) - var1.next(3) - var1.next(4) + var1.sendNext(1) + var1.sendNext(2) + var1.sendNext(3) + var1.sendNext(4) - var3.next(var2) + var3.sendNext(var2) - var2.next(201) + var2.sendNext(201) print("Note which no listen to var1") - var1.next(5) - var1.next(6) - var1.next(7) + var1.sendNext(5) + var1.sendNext(6) + var1.sendNext(7) sendCompleted(var1) - var2.next(202) - var2.next(203) - var2.next(204) -} - + var2.sendNext(202) + var2.send \ No newline at end of file diff --git a/Playgrounds/ObservablesOperators/Observables+Combining.playground/contents.xcplayground b/Playgrounds/ObservablesOperators/Observables+Combining.playground/contents.xcplayground index 37f0a1d49..0b962190c 100644 --- a/Playgrounds/ObservablesOperators/Observables+Combining.playground/contents.xcplayground +++ b/Playgrounds/ObservablesOperators/Observables+Combining.playground/contents.xcplayground @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/Playgrounds/ObservablesOperators/Observables+Conditional and Boolean.playground/Contents.swift b/Playgrounds/ObservablesOperators/Observables+Conditional and Boolean.playground/Contents.swift index 693a9c7dd..f187084ba 100644 --- a/Playgrounds/ObservablesOperators/Observables+Conditional and Boolean.playground/Contents.swift +++ b/Playgrounds/ObservablesOperators/Observables+Conditional and Boolean.playground/Contents.swift @@ -22,8 +22,8 @@ example("takeUntil") { let observable2 = PublishSubject() observable1 - >- takeUntil(observable2) - >- subscribeNext { int in + .takeUntil(observable2) + .subscribeNext { int in print(int) } @@ -52,10 +52,10 @@ xample("takeWhile") { let observable1 = PublishSubject() observable1 - >- takeWhile { int in + .takeWhile { int in int < 4 } - >- subscribeNext { int in + .subscribeNext { int in print(int) } diff --git a/Playgrounds/ObservablesOperators/Observables+Conditional and Boolean.playground/contents.xcplayground b/Playgrounds/ObservablesOperators/Observables+Conditional and Boolean.playground/contents.xcplayground index 37f0a1d49..0b962190c 100644 --- a/Playgrounds/ObservablesOperators/Observables+Conditional and Boolean.playground/contents.xcplayground +++ b/Playgrounds/ObservablesOperators/Observables+Conditional and Boolean.playground/contents.xcplayground @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/Playgrounds/ObservablesOperators/Observables+Connectable.playground/Contents.swift b/Playgrounds/ObservablesOperators/Observables+Connectable.playground/Contents.swift index 22ba58752..0cd6f3751 100644 --- a/Playgrounds/ObservablesOperators/Observables+Connectable.playground/Contents.swift +++ b/Playgrounds/ObservablesOperators/Observables+Connectable.playground/Contents.swift @@ -18,13 +18,13 @@ func sampleWithoutConnectableOperators() { let int1 = interval(1, MainScheduler.sharedInstance) int1 - >- subscribeNext { + .subscribeNext { print("first subscription \($0)") } delay(5) { int1 - >- subscribeNext { + .subscribeNext { print("second subscription \($0)") } } @@ -44,15 +44,15 @@ nc sampleWithMulticast() { let subject1 = PublishSubject() subject1 - >- subscribeNext { + .subscribeNext { print("Subject \($0)") } let int1 = interval(1, MainScheduler.sharedInstance) - >- multicast(subject1) + .multicast(subject1) int1 - >- subscribeNext { + .subscribeNext { print("first subscription \($0)") } @@ -62,7 +62,7 @@ nc sampleWithMulticast() { delay(4) { int1 - >- subscribeNext { + .subscribeNext { print("second subscription \($0)") print("---") } @@ -70,7 +70,7 @@ nc sampleWithMulticast() { delay(6) { int1 - >- subscribeNext { + .subscribeNext { print("thirth subscription \($0)") } } @@ -95,10 +95,10 @@ publish = multicast + replay subject ithReplayBuffer0() { let int1 = interval(1, MainScheduler.sharedInstance) - >- replay(0) + .replay(0) int1 - >- subscribeNext { + .subscribeNext { print("first subscription \($0)") } @@ -108,7 +108,7 @@ ithReplayBuffer0() { delay(4) { int1 - >- subscribeNext { + .subscribeNext { print("second subscription \($0)") print("---") } @@ -116,7 +116,7 @@ ithReplayBuffer0() { delay(6) { int1 - >- subscribeNext { + .subscribeNext { print("thirth subscription \($0)") } } @@ -131,10 +131,10 @@ func sampleWithReplayBuffer2() { print("--- sampleWithReplayBuffer2 ---\n") let int1 = interval(1, MainScheduler.sharedInstance) - >- replay(2) + .replay(2) int1 - >- subscribeNext { + .subscribeNext { print("first subscription \($0)") } @@ -144,7 +144,7 @@ func sampleWithReplayBuffer2() { delay(4) { int1 - >- subscribeNext { + .subscribeNext { print("second subscription \($0)") print("---") } @@ -152,7 +152,7 @@ func sampleWithReplayBuffer2() { delay(6) { int1 - >- subscribeNext { + .subscribeNext { print("third subscription \($0)") } } @@ -178,10 +178,10 @@ so publish is basically replay(0) */ let int1 = interval(1, MainScheduler.sharedInstance) - >- publish + .publish int1 - >- subscribeNext { + .subscribeNext { print("first subscription \($0)") } @@ -191,7 +191,7 @@ so publish is basically replay(0) delay(4) { int1 - >- subscribeNext { + .subscribeNext { print("second subscription \($0)") print("---") } @@ -199,7 +199,7 @@ so publish is basically replay(0) delay(6) { int1 - >- subscribeNext { + .subscribeNext { print("third subscription \($0)") } } diff --git a/Playgrounds/ObservablesOperators/Observables+Creating.playground/Contents.swift b/Playgrounds/ObservablesOperators/Observables+Creating.playground/Contents.swift index f097d8d65..424e452f5 100644 --- a/Playgrounds/ObservablesOperators/Observables+Creating.playground/Contents.swift +++ b/Playgrounds/ObservablesOperators/Observables+Creating.playground/Contents.swift @@ -19,7 +19,7 @@ Creates an observable that contains no objects. The only message it sends is the example("Empty observable") { let emptyObservable: Observable = empty() - let emptySubscriber = emptyObservable >- subscribe { event in + let emptySubscriber = emptyObservable .subscribe { event in switch event { case .Next(let box): print("\(box.value)") @@ -45,7 +45,7 @@ e("Never observable") { let neverObservable: Observable = never() let neverSubscriber = neverObservable - >- subscribe { _ in + .subscribe { _ in print("This block is never called.") } } @@ -64,7 +64,7 @@ Creates an observable that contains no objects and send only a error out. let errorObservable: Observable = failWith(error) let errorSubscriber = errorObservable - >- subscribe { event in + .subscribe { event in switch event { case .Next(let box): print("\(box.value)") @@ -87,7 +87,7 @@ rnElement/just") { let oneObservable = just(32) let oneObservableSubscriber = oneObservable - >- subscribe { event in + .subscribe { event in switch event { case .Next(let box): print("\(box.value)") @@ -105,15 +105,15 @@ Here we see that the `.Next` event is sent just once, then the `.Completed` even -### `returnElements` +### `sequence` Now we are getting to some more interesting ways to create an Observable. This function creates an observable that produces a number of values before completing. */ ents") { - let multipleObservable/* : Observable */ = returnElements(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) + let multipleObservable/* : Observable */ = sequence(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) let multipleObservableSubscriber = multipleObservable - >- subscribe { event in + .subscribe { event in switch event { case .Next(let box): print("\(box.value)") @@ -139,7 +139,7 @@ We can also create an observable from any SequenceType, such as an array fromArrayObservable = from([1, 2, 3, 4, 5]) let fromArrayObservableSubscriber = fromArrayObservable - >- subscribe { event in + .subscribe { event in switch event { case .Next(let box): print("\(box.value)") @@ -171,12 +171,12 @@ int("creating") } observable - >- subscribeNext { + .subscribeNext { print($0) } observable - >- subscribeNext { + .subscribeNext { print($0) } } @@ -203,12 +203,12 @@ Create an Observable from a function which create an observable. But do not crea } defered - >- subscribeNext { + .subscribeNext { print($0) } defered - >- subscribeNext { + .subscribeNext { print($0) } } diff --git a/Playgrounds/ObservablesOperators/Observables+Creating.playground/contents.xcplayground b/Playgrounds/ObservablesOperators/Observables+Creating.playground/contents.xcplayground index e73034da8..0b962190c 100644 --- a/Playgrounds/ObservablesOperators/Observables+Creating.playground/contents.xcplayground +++ b/Playgrounds/ObservablesOperators/Observables+Creating.playground/contents.xcplayground @@ -1,5 +1,4 @@ - - + \ No newline at end of file diff --git a/Playgrounds/ObservablesOperators/Observables+Error Handling.playground/Contents.swift b/Playgrounds/ObservablesOperators/Observables+Error Handling.playground/Contents.swift index 15017d8d0..387e114fb 100644 --- a/Playgrounds/ObservablesOperators/Observables+Error Handling.playground/Contents.swift +++ b/Playgrounds/ObservablesOperators/Observables+Error Handling.playground/Contents.swift @@ -23,10 +23,10 @@ example("catch 1st") { let observable2 = PublishSubject() observable1 - >- catch { error in + .catch { error in return observable2 } - >- subscribe { event in + .subscribe { event in switch event { case .Next(let box): print("\(box.value)") @@ -58,8 +58,8 @@ example("catch 2nd") { let observable1 = PublishSubject() observable1 - >- catch(100) - >- subscribe { event in + .catch(100) + .subscribe { event in switch event { case .Next(let box): print("\(box.value)") @@ -109,8 +109,8 @@ try") { } observable - >- retry - >- subscribe { event in + .retry + .subscribe { event in switch event { case .Next(let box): print("\(box.value)") diff --git a/Playgrounds/ObservablesOperators/Observables+Error Handling.playground/contents.xcplayground b/Playgrounds/ObservablesOperators/Observables+Error Handling.playground/contents.xcplayground index 37f0a1d49..0b962190c 100644 --- a/Playgrounds/ObservablesOperators/Observables+Error Handling.playground/contents.xcplayground +++ b/Playgrounds/ObservablesOperators/Observables+Error Handling.playground/contents.xcplayground @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/Playgrounds/ObservablesOperators/Observables+Filtering.playground/Contents.swift b/Playgrounds/ObservablesOperators/Observables+Filtering.playground/Contents.swift index 320c82f4d..1d6cfcefe 100644 --- a/Playgrounds/ObservablesOperators/Observables+Filtering.playground/Contents.swift +++ b/Playgrounds/ObservablesOperators/Observables+Filtering.playground/Contents.swift @@ -18,11 +18,11 @@ emit only those items from an Observable that pass a predicate test */ example("filter") { - let onlyEvensSubscriber = returnElements(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) - >- filter { + let onlyEvensSubscriber = sequence(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) + .filter { $0 % 2 == 0 } - >- subscribeNext { value in + .subscribeNext { value in print("\(value)") } } @@ -35,9 +35,9 @@ suppress duplicate items emitted by an Observable [More info in reactive.io website]( http://reactivex.io/documentation/operators/distinct.html ) */ xample("distinctUntilChanged") { - let distinctUntilChangedSubscriber = returnElements(1, 2, 3, 1, 1, 4) - >- distinctUntilChanged - >- subscribeNext { value in + let distinctUntilChangedSubscriber = sequence(1, 2, 3, 1, 1, 4) + .distinctUntilChanged + .subscribeNext { value in print("\(value)") } } @@ -50,9 +50,9 @@ Emit only the first n items emitted by an Observable [More info in reactive.io website]( http://reactivex.io/documentation/operators/take.html ) */ mple("take") { - let distinctUntilChangedSubscriber = returnElements(1, 2, 3, 4, 5, 6) - >- take(3) - >- subscribeNext { value in + let distinctUntilChangedSubscriber = sequence(1, 2, 3, 4, 5, 6) + .take(3) + .subscribeNext { value in print("\(value)") } } diff --git a/Playgrounds/ObservablesOperators/Observables+Mathematical and Aggregate.playground/Contents.swift b/Playgrounds/ObservablesOperators/Observables+Mathematical and Aggregate.playground/Contents.swift index ef2515d09..eb3c4f258 100644 --- a/Playgrounds/ObservablesOperators/Observables+Mathematical and Aggregate.playground/Contents.swift +++ b/Playgrounds/ObservablesOperators/Observables+Mathematical and Aggregate.playground/Contents.swift @@ -25,28 +25,28 @@ example("concat") { let var3 = Variable(var1 as Observable) let d = var3 - >- concat - >- subscribeNext { (e: Int) -> Void in + .concat + .subscribeNext { (e: Int) -> Void in print("\(e)") } - var1.next(1) - var1.next(2) - var1.next(3) - var1.next(4) + var1.sendNext(1) + var1.sendNext(2) + var1.sendNext(3) + var1.sendNext(4) - var3.next(var2) + var3.sendNext(var2) - var2.next(201) + var2.sendNext(201) - var1.next(5) - var1.next(6) - var1.next(7) + var1.sendNext(5) + var1.sendNext(6) + var1.sendNext(7) sendCompleted(var1) - var2.next(202) - var2.next(203) - var2.next(204) + var2.sendNext(202) + var2.sendNext(203) + var2.sendNext(204) } @@ -61,9 +61,6 @@ This function will perform a function on each element in the sequence until it i */ xample("aggregate") { - let aggregateSubscriber = returnElements(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) - >- aggregate(0, +) - >- subscribeNext { value in - print("\(value)") - } -} + let aggregateSubscriber = sequence(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) + .aggregate(0, +) + .subscribeNext { value \ No newline at end of file diff --git a/Playgrounds/ObservablesOperators/Observables+Mathematical and Aggregate.playground/contents.xcplayground b/Playgrounds/ObservablesOperators/Observables+Mathematical and Aggregate.playground/contents.xcplayground index 37f0a1d49..0b962190c 100644 --- a/Playgrounds/ObservablesOperators/Observables+Mathematical and Aggregate.playground/contents.xcplayground +++ b/Playgrounds/ObservablesOperators/Observables+Mathematical and Aggregate.playground/contents.xcplayground @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/Playgrounds/ObservablesOperators/Observables+Transforming.playground/Contents.swift b/Playgrounds/ObservablesOperators/Observables+Transforming.playground/Contents.swift index 95fdecaf2..0f926b20e 100644 --- a/Playgrounds/ObservablesOperators/Observables+Transforming.playground/Contents.swift +++ b/Playgrounds/ObservablesOperators/Observables+Transforming.playground/Contents.swift @@ -28,10 +28,10 @@ example("map") { } observable1 - >- map { char in + .map { char in char.hashValue } - >- subscribeNext { int in + .subscribeNext { int in print(int) } } @@ -65,10 +65,10 @@ xample("flatMap") { } observable1 - >- flatMap { int in + .flatMap { int in observable2 } - >- subscribeNext { + .subscribeNext { print($0) } } @@ -94,10 +94,10 @@ mple("scan") { } observable - >- scan(0) { acum, elem in + .scan(0) { acum, elem in acum + elem } - >- subscribeNext { + .subscribeNext { print($0) } } diff --git a/Playgrounds/ObservablesOperators/Observables+Utility.playground/Contents.swift b/Playgrounds/ObservablesOperators/Observables+Utility.playground/Contents.swift index 64d8a9fee..96036818d 100644 --- a/Playgrounds/ObservablesOperators/Observables+Utility.playground/Contents.swift +++ b/Playgrounds/ObservablesOperators/Observables+Utility.playground/Contents.swift @@ -21,7 +21,7 @@ example("subscribe") { let intOb1 = PublishSubject() intOb1 - >- subscribe { event in + .subscribe { event in print(event) } @@ -43,7 +43,7 @@ xample("subscribeNext") { let intOb1 = PublishSubject() intOb1 - >- subscribeNext { int in + .subscribeNext { int in print(int) } @@ -63,7 +63,7 @@ mple("subscribeCompleted") { let intOb1 = PublishSubject() intOb1 - >- subscribeCompleted { + .subscribeCompleted { print("It's completed") } @@ -82,7 +82,7 @@ le("subscribeError") { let intOb1 = PublishSubject() intOb1 - >- subscribeError { error in + .subscribeError { error in print(error) } @@ -103,12 +103,12 @@ Returns the same source Observable but the given closure responsible for the act let intOb1 = PublishSubject() let intOb2 = intOb1 - >- `do` { event in + .`do` { event in print("first \(event)") } intOb2 - >- subscribeNext { int in + .subscribeNext { int in print("second \(int)") } @@ -128,12 +128,12 @@ OnNext") { let intOb1 = PublishSubject() let intOb2 = intOb1 - >- doOnNext { int in + .doOnNext { int in print("first \(int)") } intOb2 - >- subscribeNext { int in + .subscribeNext { int in print("second \(int)") } diff --git a/Playgrounds/ObservablesOperators/Observables+Utility.playground/contents.xcplayground b/Playgrounds/ObservablesOperators/Observables+Utility.playground/contents.xcplayground index 37f0a1d49..0b962190c 100644 --- a/Playgrounds/ObservablesOperators/Observables+Utility.playground/contents.xcplayground +++ b/Playgrounds/ObservablesOperators/Observables+Utility.playground/contents.xcplayground @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/Playgrounds/Subjects.playground/Contents.swift b/Playgrounds/Subjects.playground/Contents.swift index 2441c0673..ef67cdd05 100644 --- a/Playgrounds/Subjects.playground/Contents.swift +++ b/Playgrounds/Subjects.playground/Contents.swift @@ -9,20 +9,20 @@ To use playgrounds please open Rx.xcworkspace, build RxSwift-OSX scheme and then func writeSequenceToConsole(name: String, sequence: Observable) { sequence - >- subscribeNext { + .subscribeNext { print("Subscription: \(name), value: \($0)") } } -/*: +ex/*: ## PublishSubject PublishSubject can begin emitting items immediately upon creation, but there is a risk that one or more items may be lost between the time the Subject is created and the observer subscribes to it. */ -example("PublishSubject") { +ample("PublishSubject") { let subject = PublishSubject() writeSequenceToConsole("1", subject) sendNext(subject, "a") @@ -33,14 +33,14 @@ example("PublishSubject") { } -/*: +ex/*: ## ReplaySubject ReplaySubject emits to any observer all of the items, in the buffer, that were emitted by the source */ -example("ReplaySubject") { +ample("ReplaySubject") { let subject = ReplaySubject(bufferSize: 1) writeSequenceToConsole("1", subject) sendNext(subject, "a") @@ -51,14 +51,14 @@ example("ReplaySubject") { } -/*: +ex/*: ## BehaviorSubject a.k.a. Variable ReplaySubject emits to any observer all of the items, in the buffer, that were emitted by the source */ -example("ReplaySubject") { +ample("ReplaySubject") { let subject = BehaviorSubject(value: "z") writeSequenceToConsole("1", subject) sendNext(subject, "a") diff --git a/Preprocessor/Preprocessor/main.swift b/Preprocessor/Preprocessor/main.swift index 534704ccb..3cafa5691 100644 --- a/Preprocessor/Preprocessor/main.swift +++ b/Preprocessor/Preprocessor/main.swift @@ -81,11 +81,11 @@ let files = fileManager.subpathsAtPath(sourceFilesRoot) var generateAllFiles = ["// Generated code\n", "import Foundation\n"] for file in files! { - if (file.pathExtension ?? "") != "tt" { + if ((file as NSString).pathExtension ?? "") != "tt" { continue } - let path = sourceFilesRoot.stringByAppendingPathComponent(file as String) + let path = (sourceFilesRoot as NSString).stringByAppendingPathComponent(file as String) let outputPath = path.substringToIndex(path.endIndex.predecessor().predecessor().predecessor()) + ".swift" @@ -93,7 +93,7 @@ for file in files! { } let script = "".join(generateAllFiles) -let scriptPath = derivedData.stringByAppendingPathComponent("_preprocessor.sh") +let scriptPath = (derivedData as NSString).stringByAppendingPathComponent("_preprocessor.sh") do { try script.writeToFile(scriptPath, atomically: true, encoding: NSUTF8StringEncoding) diff --git a/README.md b/README.md index 6e2ae2013..4ce67815d 100644 --- a/README.md +++ b/README.md @@ -85,8 +85,8 @@ These are so called bindings and Rx can help you model your system that way. ```swift combineLatest(firstName.rx_text, lastName.rx_text) { $0 + " " + $1 } - >- map { "Greeting \($0)" } - >- subscribeNext { greeting in + .map { "Greeting \($0)" } + .subscribeNext { greeting in greetingLabel.text = greeting } ``` @@ -107,7 +107,7 @@ This is how you can do simple retries with Rx ```swift doSomethingIncredible("me") - >- retry(3) + .retry(3) ``` You can also easily create custom retry operators. @@ -128,16 +128,16 @@ Writing all of this and properly testing it would be tedious. This is that same ```swift searchTextField.rx_text - >- throttle(0.3, MainScheduler.sharedInstance) - >- distinctUntilChanged - >- map { query in + .throttle(0.3, MainScheduler.sharedInstance) + .distinctUntilChanged + .map { query in API.getSearchResults(query) - >- retry(3) - >- startWith([]) // clears results on new search term - >- catch([]) + .retry(3) + .startWith([]) // clears results on new search term + .catch([]) } - >- switchLatest - >- map { results in + .switchLatest + .map { results in // bind to ui } ``` @@ -157,7 +157,7 @@ Well, there is of course `zip` operator zip(userRequest, friendsRequest) { user, friends in return (user, friends) } - >- subscribeNext { user, friends in + .subscribeNext { user, friends in // bind them to user interface } ``` @@ -171,8 +171,8 @@ So what if those APIs return results on a background thread, and binding has to zip(userRequest, friendsRequest) { user, friends in return (user, friends) } - >- observeOn(MainScheduler.sharedInstance) - >- subscribeNext { user, friends in + .observeOn(MainScheduler.sharedInstance) + .subscribeNext { user, friends in // bind them to user interface } ``` @@ -221,16 +221,16 @@ This is how we can do it using Rx. ```swift let imageSubscripton = just(imageURL) - >- throttle(0.2, MainScheduler.sharedInstance) - >- flatMap { imageURL in + .throttle(0.2, MainScheduler.sharedInstance) + .flatMap { imageURL in API.fetchImage(imageURL) } - >- observeOn(operationScheduler) - >- map { imageData in + .observeOn(operationScheduler) + .map { imageData in return decodeAndBlurImage(imageData) } - >- observeOn(MainScheduler.sharedInstance) - >- subscribeNext { blurredImage in + .observeOn(MainScheduler.sharedInstance) + .subscribeNext { blurredImage in imageView.image = blurredImage } @@ -272,10 +272,10 @@ extension UISearchBar { let text = self?.text ?? "" return self?.rx_delegate.observe("searchBar:textDidChange:") ?? empty() - >- map { a in + .map { a in return a[1] as? String ?? "" } - >- startWith(text) + .startWith(text) } } } @@ -288,7 +288,7 @@ This is how that API can be now used ```swift searchBar.rx_searchText - >- subscribeNext { searchText in + .subscribeNext { searchText in print("Current search text '\(searchText)'") } @@ -344,7 +344,7 @@ This is how they can be used: ```swift view.rx_observe("frame") - >- subscribeNext { (frame: CGRect?) in + .subscribeNext { (frame: CGRect?) in print("Got new frame \(frame)") } ``` @@ -353,7 +353,7 @@ or ```swift someSuspiciousViewController.rx_observeWeakly("behavingOk") - >- subscribeNext { (behavingOk: Bool?) in + .subscribeNext { (behavingOk: Bool?) in print("Cats can purr? \(behavingOk)") } ``` diff --git a/RxBlocking/RxBlocking/Observable+Blocking.swift b/RxBlocking/RxBlocking/Observable+Blocking.swift index 40df49449..10d3ed2e1 100644 --- a/RxBlocking/RxBlocking/Observable+Blocking.swift +++ b/RxBlocking/RxBlocking/Observable+Blocking.swift @@ -11,130 +11,134 @@ import Foundation import RxSwift #endif -public func toArray(source: Observable) - -> RxResult<[E]> { - let condition = NSCondition() - - var elements = [E]() - - var error: ErrorType? - - var ended = false +extension ObservableType { + public func toArray() + -> RxResult<[E]> { + let condition = NSCondition() + + var elements = [E]() + + var error: ErrorType? + + var ended = false - source.subscribeSafe(AnonymousObserver { e in - switch e { - case .Next(let element): - elements.append(element) - case .Error(let e): - error = e - condition.lock() - ended = true - condition.signal() - condition.unlock() - case .Completed: + self.subscribeSafe(AnonymousObserver { e in + switch e { + case .Next(let element): + elements.append(element) + case .Error(let e): + error = e + condition.lock() + ended = true + condition.signal() + condition.unlock() + case .Completed: + condition.lock() + ended = true + condition.signal() + condition.unlock() + } + }) + condition.lock() + while !ended { + condition.wait() + } + condition.unlock() + + if let error = error { + return failure(error) + } + + return success(elements) + } +} + +extension ObservableType { + public var first: RxResult { + let condition = NSCondition() + + var element: E? + + var error: ErrorType? + + var ended = false + + let d = SingleAssignmentDisposable() + + d.disposable = self.subscribeSafe(AnonymousObserver { e in + switch e { + case .Next(let e): + if element == nil { + element = e + } + break + case .Error(let e): + error = e + default: + break + } + condition.lock() ended = true condition.signal() condition.unlock() + }) + + condition.lock() + while !ended { + condition.wait() } - }) - condition.lock() - while !ended { - condition.wait() - } - condition.unlock() - - if let error = error { - return failure(error) + d.dispose() + condition.unlock() + + if let error = error { + return failure(error) + } + + return success(element) } - - return success(elements) } -public func first(source: Observable) - -> RxResult { - let condition = NSCondition() - - var element: E? - - var error: ErrorType? - - var ended = false - - let d = SingleAssignmentDisposable() - - d.disposable = source.subscribeSafe(AnonymousObserver { e in - switch e { - case .Next(let e): - if element == nil { +extension ObservableType { + public var last: RxResult { + let condition = NSCondition() + + var element: E? + + var error: ErrorType? + + var ended = false + + let d = SingleAssignmentDisposable() + + d.disposable = self.subscribeSafe(AnonymousObserver { e in + switch e { + case .Next(let e): element = e + return + case .Error(let e): + error = e + default: + break } - break - case .Error(let e): - error = e - default: - break - } + + condition.lock() + ended = true + condition.signal() + condition.unlock() + }) condition.lock() - ended = true - condition.signal() + while !ended { + condition.wait() + } + d.dispose() condition.unlock() - }) - - condition.lock() - while !ended { - condition.wait() - } - d.dispose() - condition.unlock() - - if let error = error { - return failure(error) - } - - return success(element) -} - -public func last(source: Observable) - -> RxResult { - let condition = NSCondition() - - var element: E? - - var error: ErrorType? - - var ended = false - - let d = SingleAssignmentDisposable() - - d.disposable = source.subscribeSafe(AnonymousObserver { e in - switch e { - case .Next(let e): - element = e - return - case .Error(let e): - error = e - default: - break + + if let error = error { + return failure(error) } - condition.lock() - ended = true - condition.signal() - condition.unlock() - }) - - condition.lock() - while !ended { - condition.wait() - } - d.dispose() - condition.unlock() - - if let error = error { - return failure(error) + return success(element) } - - return success(element) } \ No newline at end of file diff --git a/RxCocoa/RxCocoa.xcodeproj/project.pbxproj b/RxCocoa/RxCocoa.xcodeproj/project.pbxproj index 4ee50ff03..7056a15d8 100644 --- a/RxCocoa/RxCocoa.xcodeproj/project.pbxproj +++ b/RxCocoa/RxCocoa.xcodeproj/project.pbxproj @@ -149,7 +149,7 @@ C88BB88D1B07E6130064D411 /* RxCocoa.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxCocoa.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C88BB8E01B07F2BE0064D411 /* UIButton+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UIButton+Rx.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; C88BB8E11B07F2BE0064D411 /* UICollectionView+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UICollectionView+Rx.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - C88BB8E21B07F2BE0064D411 /* UIImageView+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UIImageView+Rx.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + C88BB8E21B07F2BE0064D411 /* UIImageView+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UIImageView+Rx.swift"; sourceTree = ""; }; C88BB8E31B07F2BE0064D411 /* UILabel+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UILabel+Rx.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; C88BB8E41B07F2BE0064D411 /* UIScrollView+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UIScrollView+Rx.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; C88BB8E51B07F2BE0064D411 /* UISearchBar+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UISearchBar+Rx.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; @@ -165,7 +165,7 @@ C8CDD7D81B52DA570043F0C5 /* RxCLLocationManagerDelegateProxy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = RxCLLocationManagerDelegateProxy.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; C8CDD7DB1B52DA790043F0C5 /* CLLocationManager+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "CLLocationManager+Rx.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; C8CDD7DE1B52DAA80043F0C5 /* RxTarget.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = RxTarget.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - C8D95C161B2F0CD700FA661F /* DelegateProxyType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = DelegateProxyType.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + C8D95C161B2F0CD700FA661F /* DelegateProxyType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = DelegateProxyType.swift; sourceTree = ""; }; CBEEA6781B12323800176529 /* NSSlider+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "NSSlider+Rx.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; F333C2E91B5AF33E00F1D8D9 /* UITextView+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UITextView+Rx.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; F333C2EB1B5AF35400F1D8D9 /* RxTextViewDelegateProxy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = RxTextViewDelegateProxy.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; diff --git a/RxCocoa/RxCocoa/Common/CLLocationManager+Rx.swift b/RxCocoa/RxCocoa/Common/CLLocationManager+Rx.swift index b7cb0e3eb..450a7b5b1 100644 --- a/RxCocoa/RxCocoa/Common/CLLocationManager+Rx.swift +++ b/RxCocoa/RxCocoa/Common/CLLocationManager+Rx.swift @@ -22,21 +22,21 @@ extension CLLocationManager { public var rx_didUpdateLocations: Observable<[CLLocation]!> { return rx_delegate.observe("locationManager:didUpdateLocations:") - >- map { a in + .map { a in return a[1] as? [CLLocation] } } public var rx_didFailWithError: Observable { return rx_delegate.observe("locationManager:didFailWithError:") - >- map { a in + .map { a in return a[1] as? NSError } } public var rx_didFinishDeferredUpdatesWithError: Observable { return rx_delegate.observe("locationManager:didFinishDeferredUpdatesWithError:") - >- map { a in + .map { a in return a[1] as? NSError } } @@ -45,14 +45,14 @@ extension CLLocationManager { public var rx_didPauseLocationUpdates: Observable { return rx_delegate.observe("locationManagerDidPauseLocationUpdates:") - >- map { _ in + .map { _ in return () } } public var rx_didResumeLocationUpdates: Observable { return rx_delegate.observe("locationManagerDidResumeLocationUpdates:") - >- map { _ in + .map { _ in return () } } @@ -61,7 +61,7 @@ extension CLLocationManager { public var rx_didUpdateHeading: Observable { return rx_delegate.observe("locationManager:didUpdateHeading:") - >- map { a in + .map { a in return a[1] as? CLHeading } } @@ -70,35 +70,35 @@ extension CLLocationManager { public var rx_didEnterRegion: Observable { return rx_delegate.observe("locationManager:didEnterRegion:") - >- map { a in + .map { a in return a[1] as? CLRegion } } public var rx_didExitRegion: Observable { return rx_delegate.observe("locationManager:didExitRegion:") - >- map { a in + .map { a in return a[1] as? CLRegion } } public var rx_didDetermineStateForRegion: Observable<(state: CLRegionState, region: CLRegion!)> { return rx_delegate.observe("locationManager:didDetermineState:forRegion:") - >- map { a in + .map { a in return (state: a[1] as! CLRegionState, region: a[2] as? CLRegion) } } public var rx_monitoringDidFailForRegionWithError: Observable<(region: CLRegion!, error: NSError!)> { return rx_delegate.observe("locationManager:monitoringDidFailForRegion:withError:") - >- map { a in + .map { a in return (region: a[1] as? CLRegion, error: a[2] as? NSError) } } public var rx_didStartMonitoringForRegion: Observable { return rx_delegate.observe("locationManager:didStartMonitoringForRegion:") - >- map { a in + .map { a in return a[1] as? CLRegion } } @@ -109,14 +109,14 @@ extension CLLocationManager { public var rx_didRangeBeaconsInRegion: Observable<(beacons: [CLBeacon]!, region: CLBeaconRegion!)> { return rx_delegate.observe("locationManager:didRangeBeacons:inRegion:") - >- map { a in + .map { a in return (beacons: a[1] as? [CLBeacon], region: a[2] as? CLBeaconRegion) } } public var rx_rangingBeaconsDidFailForRegionWithError: Observable<(region: CLBeaconRegion!, error: NSError!)> { return rx_delegate.observe("locationManager:rangingBeaconsDidFailForRegion:withError:") - >- map { a in + .map { a in return (region: a[1] as? CLBeaconRegion, error: a[2] as? NSError) } } @@ -126,7 +126,7 @@ extension CLLocationManager { @available(iOS 8.0, *) public var rx_didVisit: Observable { return rx_delegate.observe("locationManager:didVisit:") - >- map { a in + .map { a in return a[1] as? CLVisit } } @@ -137,7 +137,7 @@ extension CLLocationManager { public var rx_didChangeAuthorizationStatus: Observable { return rx_delegate.observe("locationManager:didChangeAuthorizationStatus:") - >- map { a in + .map { a in return a[1] as! CLAuthorizationStatus } } diff --git a/RxCocoa/RxCocoa/Common/DelegateProxyType.swift b/RxCocoa/RxCocoa/Common/DelegateProxyType.swift index 1e7ce7ebf..2c5cc9172 100644 --- a/RxCocoa/RxCocoa/Common/DelegateProxyType.swift +++ b/RxCocoa/RxCocoa/Common/DelegateProxyType.swift @@ -153,14 +153,15 @@ func installDelegate(proxy: P, delegate: AnyObject, retain } } -func setProxyDataSourceForObject(object: AnyObject, dataSource: AnyObject, retainDataSource: Bool, binding: (P, Event) -> Void) - -> Observable -> Disposable { - return { source in +extension ObservableType { + func subscribeProxyDataSourceForObject(object: AnyObject, dataSource: AnyObject, retainDataSource: Bool, binding: (P, Event) -> Void) + -> Disposable { let proxy: P = proxyForObject(object) let disposable = installDelegate(proxy, delegate: dataSource, retainDelegate: retainDataSource, onProxyForObject: object) // we should never let the subscriber to complete because it should retain data source - let subscription = concat(returnElements(source, never())).subscribe(AnonymousObserver { event in + let source = sequence(self.normalize(), never()) as Observable> + let subscription = source.concat.subscribe { (event: Event) in MainScheduler.ensureExecutingOnScheduler() assert(proxy === P.currentDelegateFor(object), "Proxy changed from the time it was first set.\nOriginal: \(proxy)\nExisting: \(P.currentDelegateFor(object))") @@ -178,7 +179,7 @@ func setProxyDataSourceForObject(object: AnyObjec default: break } - }) + } return StableCompositeDisposable.create(subscription, disposable) } diff --git a/RxCocoa/RxCocoa/Common/Observables/Implementations/KVOObservable.swift b/RxCocoa/RxCocoa/Common/Observables/Implementations/KVOObservable.swift index 3a786d2eb..49e3fac10 100644 --- a/RxCocoa/RxCocoa/Common/Observables/Implementations/KVOObservable.swift +++ b/RxCocoa/RxCocoa/Common/Observables/Implementations/KVOObservable.swift @@ -52,15 +52,15 @@ func observeWeaklyKeyPathFor(target: NSObject, keyPath: String, options: NSKeyVa let components = keyPath.componentsSeparatedByString(".").filter { $0 != "self" } let observable = observeWeaklyKeyPathFor(target, keyPathSections: components, options: options) - >- distinctUntilChanged { $0 === $1 } - >- finishWithNilWhenDealloc(target) + .distinctUntilChanged { $0 === $1 } + .finishWithNilWhenDealloc(target) if !options.intersect(.Initial).isEmpty { return observable } else { return observable - >- skip(1) + .skip(1) } } @@ -72,17 +72,17 @@ func isWeakProperty(properyRuntimeInfo: String) -> Bool { return properyRuntimeInfo.rangeOfString(",W,") != nil } -func finishWithNilWhenDealloc(target: NSObject) - -> Observable -> Observable { - let deallocating = target.rx_deallocating - - return { source in +extension ObservableType where E == AnyObject? { + func finishWithNilWhenDealloc(target: NSObject) + -> Observable { + let deallocating = target.rx_deallocating + return deallocating - >- map { _ in + .map { _ in return just(nil) } - >- startWith(source) - >- switchLatest + .startWith(self.normalize()) + .switchLatest } } @@ -109,7 +109,7 @@ func observeWeaklyKeyPathFor( // KVO recursion for value changes return propertyObservable - >- map { (nextTarget: AnyObject?) in + .map { (nextTarget: AnyObject?) -> Observable in if nextTarget == nil { return just(nil) } @@ -133,13 +133,13 @@ func observeWeaklyKeyPathFor( if isWeak { return nextElementsObservable - >- finishWithNilWhenDealloc(nextObject!) + .finishWithNilWhenDealloc(nextObject!) } else { return nextElementsObservable } } - >- switchLatest + .switchLatest } #endif diff --git a/RxCocoa/RxCocoa/Common/Observables/NSObject+Rx+CoreGraphics.swift b/RxCocoa/RxCocoa/Common/Observables/NSObject+Rx+CoreGraphics.swift index b74aa4714..a9e287b71 100644 --- a/RxCocoa/RxCocoa/Common/Observables/NSObject+Rx+CoreGraphics.swift +++ b/RxCocoa/RxCocoa/Common/Observables/NSObject+Rx+CoreGraphics.swift @@ -25,8 +25,8 @@ let CGPointType = "{CGPoint=ff}" // rx_observe + CoreGraphics extension NSObject { public func rx_observe(keyPath: String, options: NSKeyValueObservingOptions = NSKeyValueObservingOptions.New.union(NSKeyValueObservingOptions.Initial), retainSelf: Bool = true) -> Observable { - return rx_observe(keyPath, options: options, retainSelf: retainSelf) as Observable - >- map { value in + return rx_observe(keyPath, options: options, retainSelf: retainSelf) + .map { (value: NSValue?) in if let value = value { if strcmp(value.objCType, CGRectType) != 0 { return nil @@ -42,8 +42,8 @@ extension NSObject { } public func rx_observe(keyPath: String, options: NSKeyValueObservingOptions = NSKeyValueObservingOptions.New.union(NSKeyValueObservingOptions.Initial), retainSelf: Bool = true) -> Observable { - return rx_observe(keyPath, options: options, retainSelf: retainSelf) as Observable - >- map { value in + return rx_observe(keyPath, options: options, retainSelf: retainSelf) + .map { (value: NSValue?) in if let value = value { if strcmp(value.objCType, CGSizeType) != 0 { return nil @@ -59,8 +59,8 @@ extension NSObject { } public func rx_observe(keyPath: String, options: NSKeyValueObservingOptions = NSKeyValueObservingOptions.New.union(NSKeyValueObservingOptions.Initial), retainSelf: Bool = true) -> Observable { - return rx_observe(keyPath, options: options, retainSelf: retainSelf) as Observable - >- map { value in + return rx_observe(keyPath, options: options, retainSelf: retainSelf) + .map { (value: NSValue?) in if let value = value { if strcmp(value.objCType, CGPointType) != 0 { return nil @@ -81,8 +81,8 @@ extension NSObject { // rx_observeWeakly + CoreGraphics extension NSObject { public func rx_observeWeakly(keyPath: String, options: NSKeyValueObservingOptions = NSKeyValueObservingOptions.New.union(NSKeyValueObservingOptions.Initial)) -> Observable { - return rx_observeWeakly(keyPath, options: options) as Observable - >- map { value in + return rx_observeWeakly(keyPath, options: options) + .map { (value: NSValue?) in if let value = value { if strcmp(value.objCType, CGRectType) != 0 { return nil @@ -98,8 +98,8 @@ extension NSObject { } public func rx_observeWeakly(keyPath: String, options: NSKeyValueObservingOptions = NSKeyValueObservingOptions.New.union(NSKeyValueObservingOptions.Initial)) -> Observable { - return rx_observeWeakly(keyPath, options: options) as Observable - >- map { value in + return rx_observeWeakly(keyPath, options: options) + .map { (value: NSValue?) in if let value = value { if strcmp(value.objCType, CGSizeType) != 0 { return nil @@ -115,8 +115,8 @@ extension NSObject { } public func rx_observeWeakly(keyPath: String, options: NSKeyValueObservingOptions = NSKeyValueObservingOptions.New.union(NSKeyValueObservingOptions.Initial)) -> Observable { - return rx_observeWeakly(keyPath, options: options) as Observable - >- map { value in + return rx_observeWeakly(keyPath, options: options) + .map { (value: NSValue?) in if let value = value { if strcmp(value.objCType, CGPointType) != 0 { return nil diff --git a/RxCocoa/RxCocoa/Common/Observables/NSObject+Rx.swift b/RxCocoa/RxCocoa/Common/Observables/NSObject+Rx.swift index 3fe60ac40..dbe4d6c90 100644 --- a/RxCocoa/RxCocoa/Common/Observables/NSObject+Rx.swift +++ b/RxCocoa/RxCocoa/Common/Observables/NSObject+Rx.swift @@ -56,7 +56,7 @@ extension NSObject { // Doesn't retain `self` and when `self` is deallocated, completes the sequence. public func rx_observeWeakly(keyPath: String, options: NSKeyValueObservingOptions = NSKeyValueObservingOptions.New.union(NSKeyValueObservingOptions.Initial)) -> Observable { return observeWeaklyKeyPathFor(self, keyPath: keyPath, options: options) - >- map { n in + .map { n in return n as? Element } } diff --git a/RxCocoa/RxCocoa/Common/Observables/NSURLSession+Rx.swift b/RxCocoa/RxCocoa/Common/Observables/NSURLSession+Rx.swift index 9c1346278..5ebf5f3ee 100644 --- a/RxCocoa/RxCocoa/Common/Observables/NSURLSession+Rx.swift +++ b/RxCocoa/RxCocoa/Common/Observables/NSURLSession+Rx.swift @@ -100,7 +100,7 @@ extension NSURLSession { } public func rx_data(request: NSURLRequest) -> Observable { - return rx_response(request) >- mapOrDie { (data, response) -> RxResult in + return rx_response(request).mapOrDie { (data, response) -> RxResult in if let response = response as? NSHTTPURLResponse { if 200 ..< 300 ~= response.statusCode { return success(data!) @@ -118,7 +118,7 @@ extension NSURLSession { } public func rx_JSON(request: NSURLRequest) -> Observable { - return rx_data(request) >- mapOrDie { (data) -> RxResult in + return rx_data(request).mapOrDie { (data) -> RxResult in do { let result = try NSJSONSerialization.JSONObjectWithData(data, options: []) return success(result) diff --git a/RxCocoa/RxCocoa/OSX/NSTextField+Rx.swift b/RxCocoa/RxCocoa/OSX/NSTextField+Rx.swift index a92cc653f..c8cf96051 100644 --- a/RxCocoa/RxCocoa/OSX/NSTextField+Rx.swift +++ b/RxCocoa/RxCocoa/OSX/NSTextField+Rx.swift @@ -41,6 +41,26 @@ class RxTextFieldDelegate : DelegateProxy } } +extension ObservableType where E == String { + public func subscribeTextOf(textField: NSTextField) -> Disposable { + return self.subscribe { event in + MainScheduler.ensureExecutingOnScheduler() + + switch event { + case .Next(let value): + textField.stringValue = value + case .Error(let error): + #if DEBUG + rxFatalError("Binding error to textbox: \(error)") + #endif + break + case .Completed: + break + } + } + } +} + extension NSTextField { public func rx_subscribeTextTo(source: Observable) -> Disposable { return source.subscribe(AnonymousObserver { event in diff --git a/RxCocoa/RxCocoa/iOS/DataSources/RxCollectionViewReactiveArrayDataSource.swift b/RxCocoa/RxCocoa/iOS/DataSources/RxCollectionViewReactiveArrayDataSource.swift index 95726501c..1ba395d4a 100644 --- a/RxCocoa/RxCocoa/iOS/DataSources/RxCollectionViewReactiveArrayDataSource.swift +++ b/RxCocoa/RxCocoa/iOS/DataSources/RxCollectionViewReactiveArrayDataSource.swift @@ -36,16 +36,36 @@ class _RxCollectionViewReactiveArrayDataSource: NSObject, UICollectionViewDataSo } } +class RxCollectionViewReactiveArrayDataSourceSequenceWrapper : RxCollectionViewReactiveArrayDataSource + , RxCollectionViewDataSourceType { + typealias Element = S + + override init(cellFactory: CellFactory) { + super.init(cellFactory: cellFactory) + } + + func collectionView(collectionView: UICollectionView, observedEvent: Event) { + switch observedEvent { + case .Next(let value): + super.collectionView(collectionView, observedElements: Array(value)) + self.itemModels = Array(value) + case .Error(let error): + bindingErrorToInterface(error) + case .Completed: + break + } + } +} + + // Please take a look at `DelegateProxyType.swift` -class RxCollectionViewReactiveArrayDataSource : _RxCollectionViewReactiveArrayDataSource - , RxCollectionViewDataSourceType { - typealias Element = [ElementType] +class RxCollectionViewReactiveArrayDataSource : _RxCollectionViewReactiveArrayDataSource { - typealias CellFactory = (UICollectionView, Int, ElementType) -> UICollectionViewCell + typealias CellFactory = (UICollectionView, Int, Element) -> UICollectionViewCell - var itemModels: [ElementType]? = nil + var itemModels: [Element]? = nil - func modelAtIndex(index: Int) -> ElementType? { + func modelAtIndex(index: Int) -> Element? { return itemModels?[index] } @@ -67,15 +87,8 @@ class RxCollectionViewReactiveArrayDataSource : _RxCollectionViewRe // reactive - func collectionView(collectionView: UICollectionView, observedEvent: Event) { - switch observedEvent { - case .Next(let value): - self.itemModels = value - case .Error(let error): - bindingErrorToInterface(error) - case .Completed: - break - } + func collectionView(collectionView: UICollectionView, observedElements: [Element]) { + self.itemModels = observedElements collectionView.reloadData() } diff --git a/RxCocoa/RxCocoa/iOS/DataSources/RxTableViewReactiveArrayDataSource.swift b/RxCocoa/RxCocoa/iOS/DataSources/RxTableViewReactiveArrayDataSource.swift index 77c8a10a5..73181ceea 100644 --- a/RxCocoa/RxCocoa/iOS/DataSources/RxTableViewReactiveArrayDataSource.swift +++ b/RxCocoa/RxCocoa/iOS/DataSources/RxTableViewReactiveArrayDataSource.swift @@ -36,16 +36,34 @@ class _RxTableViewReactiveArrayDataSource: NSObject, UITableViewDataSource { } } -// Please take a look at `DelegateProxyType.swift` -class RxTableViewReactiveArrayDataSource : _RxTableViewReactiveArrayDataSource - , RxTableViewDataSourceType { - typealias Element = [ElementType] + +class RxTableViewReactiveArrayDataSourceSequenceWrapper : RxTableViewReactiveArrayDataSource + , RxTableViewDataSourceType { + typealias Element = S + + override init(cellFactory: CellFactory) { + super.init(cellFactory: cellFactory) + } - typealias CellFactory = (UITableView, Int, ElementType) -> UITableViewCell + func tableView(tableView: UITableView, observedEvent: Event) { + switch observedEvent { + case .Next(let value): + super.tableView(tableView, observedElements: Array(value)) + case .Error(let error): + bindingErrorToInterface(error) + case .Completed: + break + } + } +} + +// Please take a look at `DelegateProxyType.swift` +class RxTableViewReactiveArrayDataSource : _RxTableViewReactiveArrayDataSource { + typealias CellFactory = (UITableView, Int, Element) -> UITableViewCell - var itemModels: [ElementType]? = nil + var itemModels: [Element]? = nil - func modelAtIndex(index: Int) -> ElementType? { + func modelAtIndex(index: Int) -> Element? { return itemModels?[index] } @@ -65,15 +83,8 @@ class RxTableViewReactiveArrayDataSource : _RxTableViewReactiveArra // reactive - func tableView(tableView: UITableView, observedEvent: Event<[ElementType]>) { - switch observedEvent { - case .Next(let value): - self.itemModels = value - case .Error(let error): - bindingErrorToInterface(error) - case .Completed: - break - } + func tableView(tableView: UITableView, observedElements: [Element]) { + self.itemModels = observedElements tableView.reloadData() } diff --git a/RxCocoa/RxCocoa/iOS/UIActionSheet+Rx.swift b/RxCocoa/RxCocoa/iOS/UIActionSheet+Rx.swift index 818426194..979e5e21b 100644 --- a/RxCocoa/RxCocoa/iOS/UIActionSheet+Rx.swift +++ b/RxCocoa/RxCocoa/iOS/UIActionSheet+Rx.swift @@ -20,21 +20,21 @@ extension UIActionSheet { public var rx_clickedButtonAtIndex: Observable { return rx_delegate.observe("actionSheet:clickedButtonAtIndex:") - >- map { a in + .map { a in return a[1] as! Int } } public var rx_willDismissWithButtonIndex: Observable { return rx_delegate.observe("actionSheet:willDismissWithButtonIndex:") - >- map { a in + .map { a in return a[1] as! Int } } public var rx_didDismissWithButtonIndex: Observable { return rx_delegate.observe("actionSheet:didDismissWithButtonIndex:") - >- map { a in + .map { a in return a[1] as! Int } } diff --git a/RxCocoa/RxCocoa/iOS/UIAlertView+Rx.swift b/RxCocoa/RxCocoa/iOS/UIAlertView+Rx.swift index c919478f0..d4414a353 100644 --- a/RxCocoa/RxCocoa/iOS/UIAlertView+Rx.swift +++ b/RxCocoa/RxCocoa/iOS/UIAlertView+Rx.swift @@ -20,21 +20,21 @@ extension UIAlertView { public var rx_clickedButtonAtIndex: Observable { return rx_delegate.observe("alertView:clickedButtonAtIndex:") - >- map { a in + .map { a in return a[1] as! Int } } public var rx_willDismissWithButtonIndex: Observable { return rx_delegate.observe("alertView:willDismissWithButtonIndex:") - >- map { a in + .map { a in return a[1] as! Int } } public var rx_didDismissWithButtonIndex: Observable { return rx_delegate.observe("alertView:didDismissWithButtonIndex:") - >- map { a in + .map { a in return a[1] as! Int } } diff --git a/RxCocoa/RxCocoa/iOS/UIBarButtonItem+Rx.swift b/RxCocoa/RxCocoa/iOS/UIBarButtonItem+Rx.swift index 03c5d25d4..17ee9e5a4 100644 --- a/RxCocoa/RxCocoa/iOS/UIBarButtonItem+Rx.swift +++ b/RxCocoa/RxCocoa/iOS/UIBarButtonItem+Rx.swift @@ -19,7 +19,7 @@ extension UIBarButtonItem { sendNext(observer, ()) } return target - } >- takeUntil(rx_deallocated) + } .takeUntil(rx_deallocated) } } diff --git a/RxCocoa/RxCocoa/iOS/UICollectionView+Rx.swift b/RxCocoa/RxCocoa/iOS/UICollectionView+Rx.swift index f425ceeee..eb940c1b8 100644 --- a/RxCocoa/RxCocoa/iOS/UICollectionView+Rx.swift +++ b/RxCocoa/RxCocoa/iOS/UICollectionView+Rx.swift @@ -12,6 +12,48 @@ import RxSwift #endif import UIKit +extension ObservableType { + // data source + + // Registers reactive data source with collection view. + // Difference between reactive data source and UICollectionViewDataSource is that reactive + // has additional method: + // + // ``` + // func collectionView(collectionView: UICollectionView, observedEvent: Event) -> Void + // ``` + // + // If you want to register non reactive data source, please use `rx_setDataSource` method + public func subscribe where E == DataSource.Element>(collectionView: UICollectionView, withReactiveDataSource dataSource: DataSource) + -> Disposable { + return self.subscribeProxyDataSourceForObject(collectionView, dataSource: dataSource, retainDataSource: false) { (_: RxCollectionViewDataSourceProxy, event) -> Void in + dataSource.collectionView(collectionView, observedEvent: event) + } + } +} + +extension ObservableType where E: SequenceType { + // `reloadData` - items subscription methods (it's assumed that there is one section, and it is typed `Void`) + + public func subscribeItemsOf(collectionView: UICollectionView, cellFactory: (UICollectionView, Int, E.Generator.Element) -> UICollectionViewCell) + -> Disposable { + let dataSource = RxCollectionViewReactiveArrayDataSourceSequenceWrapper(cellFactory: cellFactory) + return self.subscribe(collectionView, withReactiveDataSource: dataSource) + } + + public func subscribeItemsOf(collectionView: UICollectionView, withCellIdentifier cellIdentifier: String, configureCell: (Int, E.Generator.Element, Cell) -> Void) + -> Disposable { + let dataSource = RxCollectionViewReactiveArrayDataSourceSequenceWrapper { (cv, i, item) in + let indexPath = NSIndexPath(forItem: i, inSection: 0) + let cell = cv.dequeueReusableCellWithReuseIdentifier(cellIdentifier, forIndexPath: indexPath) as! Cell + configureCell(i, item, cell) + return cell + } + + return self.subscribe(collectionView, withReactiveDataSource: dataSource) + } +} + extension UICollectionView { // factories @@ -34,57 +76,12 @@ extension UICollectionView { let proxy: RxCollectionViewDataSourceProxy = proxyForObject(self) return installDelegate(proxy, delegate: dataSource, retainDelegate: false, onProxyForObject: self) } - - // data source - - // Registers reactive data source with collection view. - // Difference between reactive data source and UICollectionViewDataSource is that reactive - // has additional method: - // - // ``` - // func collectionView(collectionView: UICollectionView, observedEvent: Event) -> Void - // ``` - // - // If you want to register non reactive data source, please use `rx_setDataSource` method - public func rx_subscribeWithReactiveDataSource> - (dataSource: DataSource) - -> Observable -> Disposable { - return setProxyDataSourceForObject(self, dataSource: dataSource, retainDataSource: false) { (_: RxCollectionViewDataSourceProxy, event) -> Void in - dataSource.collectionView(self, observedEvent: event) - } - } - // `reloadData` - items subscription methods (it's assumed that there is one section, and it is typed `Void`) - - public func rx_subscribeItemsTo - (cellFactory: (UICollectionView, Int, Item) -> UICollectionViewCell) - -> Observable<[Item]> -> Disposable { - return { source in - let dataSource = RxCollectionViewReactiveArrayDataSource(cellFactory: cellFactory) - return self.rx_subscribeWithReactiveDataSource(dataSource)(source) - } - } - - public func rx_subscribeItemsToWithCellIdentifier - (cellIdentifier: String, configureCell: (Int, Item, Cell) -> Void) - -> Observable<[Item]> -> Disposable { - return { source in - let dataSource = RxCollectionViewReactiveArrayDataSource { (cv, i, item) in - let indexPath = NSIndexPath(forItem: i, inSection: 0) - let cell = cv.dequeueReusableCellWithReuseIdentifier(cellIdentifier, forIndexPath: indexPath) as! Cell - configureCell(i, item, cell) - return cell - } - - return self.rx_subscribeWithReactiveDataSource(dataSource)(source) - } - } - // events public var rx_itemSelected: Observable { return rx_delegate.observe("collectionView:didSelectItemAtIndexPath:") - >- map { a in + .map { a in return a[1] as! NSIndexPath } } @@ -92,38 +89,10 @@ extension UICollectionView { // typed events public func rx_modelSelected() -> Observable { - return rx_itemSelected >- map { indexPath in + return rx_itemSelected .map { indexPath in let dataSource: RxCollectionViewReactiveArrayDataSource = castOrFatalError(self.rx_dataSource.forwardToDelegate(), message: "This method only works in case one of the `rx_subscribeItemsTo` methods was used.") return dataSource.modelAtIndex(indexPath.item)! } } } - -// deprecated -extension UICollectionView { - @available(*, deprecated=1.7, message="Replaced by `rx_subscribeItemsToWithCellIdentifier`") - public func rx_subscribeItemsWithIdentifierTo - (cellIdentifier: String, configureCell: (UICollectionView, NSIndexPath, E, Cell) -> Void) - (source: Observable<[E]>) - -> Disposable { - let l = rx_subscribeItemsToWithCellIdentifier(cellIdentifier) { (i: Int, e: E, cell: Cell) in - return configureCell(self, NSIndexPath(forItem: i, inSection: 0), e, cell) - } - - return l(source) - } - - @available(*, deprecated=1.7, message="Replaced by `rx_itemSelected`") - public func rx_itemTap() -> Observable<(UICollectionView, Int)> { - return rx_itemSelected - >- map { i in - return (self, i.item) - } - } - - @available(*, deprecated=1.7, message="Replaced by `rx_modelSelected`") - public func rx_elementTap() -> Observable { - return rx_modelSelected() - } -} diff --git a/RxCocoa/RxCocoa/iOS/UIControl+Rx.swift b/RxCocoa/RxCocoa/iOS/UIControl+Rx.swift index 6f8211c22..34c1ad085 100644 --- a/RxCocoa/RxCocoa/iOS/UIControl+Rx.swift +++ b/RxCocoa/RxCocoa/iOS/UIControl+Rx.swift @@ -12,6 +12,27 @@ import RxSwift #endif import UIKit +extension ObservableType where E == Bool { + public func subscribeEnabledOf(control: UIControl) -> Disposable { + weak var weakControl: UIControl? = control + return self.subscribe { event in + MainScheduler.ensureExecutingOnScheduler() + + switch event { + case .Next(let value): + weakControl?.enabled = value + case .Error(let error): +#if DEBUG + rxFatalError("Binding error to textbox: \(error)") +#endif + break + case .Completed: + break + } + } + } +} + extension UIControl { public func rx_controlEvents(controlEvents: UIControlEvents) -> Observable { return AnonymousObservable { observer in @@ -25,7 +46,7 @@ extension UIControl { return AnonymousDisposable { controlTarget.dispose() } - } >- takeUntil(rx_deallocated) + } .takeUntil(rx_deallocated) } func rx_value(getValue: () -> T) -> Observable { @@ -40,24 +61,7 @@ extension UIControl { return AnonymousDisposable { controlTarget.dispose() } - } >- takeUntil(rx_deallocated) + } .takeUntil(rx_deallocated) } - public func rx_subscribeEnabledTo(source: Observable) -> Disposable { - return source.subscribe(AnonymousObserver { [weak self] event in - MainScheduler.ensureExecutingOnScheduler() - - switch event { - case .Next(let value): - self?.enabled = value - case .Error(let error): -#if DEBUG - rxFatalError("Binding error to textbox: \(error)") -#endif - break - case .Completed: - break - } - }) - } } diff --git a/RxCocoa/RxCocoa/iOS/UIGestureRecognizer+Rx.swift b/RxCocoa/RxCocoa/iOS/UIGestureRecognizer+Rx.swift index f91bf04a6..231203b53 100644 --- a/RxCocoa/RxCocoa/iOS/UIGestureRecognizer+Rx.swift +++ b/RxCocoa/RxCocoa/iOS/UIGestureRecognizer+Rx.swift @@ -61,7 +61,7 @@ extension UIGestureRecognizer { } return observer - } >- takeUntil(rx_deallocated) + } .takeUntil(rx_deallocated) } } \ No newline at end of file diff --git a/RxCocoa/RxCocoa/iOS/UIImageView+Rx.swift b/RxCocoa/RxCocoa/iOS/UIImageView+Rx.swift index 97e4cd920..748243a31 100644 --- a/RxCocoa/RxCocoa/iOS/UIImageView+Rx.swift +++ b/RxCocoa/RxCocoa/iOS/UIImageView+Rx.swift @@ -12,39 +12,38 @@ import RxSwift #endif import UIKit -extension UIImageView { - public func rx_subscribeImageTo(source: Observable) -> Disposable { - return rx_subscribeImageTo(false)(source) +extension ObservableType where E == UIImage? { + public func subscribeImageOf(imageView: UIImageView) -> Disposable { + return subscribeImageOf(imageView, animated: false) } - public func rx_subscribeImageTo - (animated: Bool) - -> Observable -> Disposable { - return { source in - return source.subscribe(AnonymousObserver { event in - MainScheduler.ensureExecutingOnScheduler() - - switch event { - case .Next(let boxedValue): - let value = boxedValue - if animated && value != nil { - let transition = CATransition() - transition.duration = 0.25 - transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) - transition.type = kCATransitionFade - self.layer.addAnimation(transition, forKey: kCATransition) - } - else { - self.layer.removeAllAnimations() - } - self.image = value - case .Error(let error): - bindingErrorToInterface(error) - break - case .Completed: - break + public func subscribeImageOf(imageView: UIImageView, animated: Bool) -> Disposable { + return self.subscribe { event in + MainScheduler.ensureExecutingOnScheduler() + + switch event { + case .Next(let boxedValue): + let value = boxedValue + if animated && value != nil { + let transition = CATransition() + transition.duration = 0.25 + transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) + transition.type = kCATransitionFade + imageView.layer.addAnimation(transition, forKey: kCATransition) + } + else { + imageView.layer.removeAllAnimations() } - }) + imageView.image = value + case .Error(let error): + bindingErrorToInterface(error) + break + case .Completed: + break + } } } } + +extension UIImageView { +} diff --git a/RxCocoa/RxCocoa/iOS/UILabel+Rx.swift b/RxCocoa/RxCocoa/iOS/UILabel+Rx.swift index 0f873c20b..dc637b1d3 100644 --- a/RxCocoa/RxCocoa/iOS/UILabel+Rx.swift +++ b/RxCocoa/RxCocoa/iOS/UILabel+Rx.swift @@ -12,14 +12,14 @@ import RxSwift #endif import UIKit -extension UILabel { - public func rx_subscribeTextTo(source: Observable) -> Disposable { - return source.subscribe(AnonymousObserver { event in +extension ObservableType where E == String { + public func subscribeTextOf(label: UILabel) -> Disposable { + return self.subscribe { event in MainScheduler.ensureExecutingOnScheduler() switch event { case .Next(let value): - self.text = value + label.text = value case .Error(let error): #if DEBUG rxFatalError("Binding error to textbox: \(error)") @@ -28,6 +28,9 @@ extension UILabel { case .Completed: break } - }) + } } +} + +extension UILabel { } \ No newline at end of file diff --git a/RxCocoa/RxCocoa/iOS/UISearchBar+Rx.swift b/RxCocoa/RxCocoa/iOS/UISearchBar+Rx.swift index 4a5fcaf86..b45515118 100644 --- a/RxCocoa/RxCocoa/iOS/UISearchBar+Rx.swift +++ b/RxCocoa/RxCocoa/iOS/UISearchBar+Rx.swift @@ -24,11 +24,11 @@ extension UISearchBar { return deferred { [weak self] in let text = self?.text ?? "" - return self?.rx_delegate.observe("searchBar:textDidChange:") ?? empty() - >- map { a in + return (self?.rx_delegate.observe("searchBar:textDidChange:") ?? empty()) + .map { a in return a[1] as? String ?? "" } - >- startWith(text) + .startWith(text) } } } \ No newline at end of file diff --git a/RxCocoa/RxCocoa/iOS/UITableView+Rx.swift b/RxCocoa/RxCocoa/iOS/UITableView+Rx.swift index 2fdc0bb91..fd7d06fe4 100644 --- a/RxCocoa/RxCocoa/iOS/UITableView+Rx.swift +++ b/RxCocoa/RxCocoa/iOS/UITableView+Rx.swift @@ -12,6 +12,49 @@ import RxSwift #endif import UIKit + +extension ObservableType { + // data source + + // Registers reactive data source with table view. + // Difference between reactive data source and UITableViewDataSource is that reactive + // has additional method: + // + // ``` + // func tableView(tableView: UITableView, observedEvent: Event) -> Void + // ``` + // + // If you want to register non reactive data source, please use `rx_setDataSource` method + public func subscribe where E == DataSource.Element>(tableView: UITableView, withReactiveDataSource dataSource: DataSource) + -> Disposable { + return self.subscribeProxyDataSourceForObject(tableView, dataSource: dataSource, retainDataSource: false) { (_: RxTableViewDataSourceProxy, event) -> Void in + dataSource.tableView(tableView, observedEvent: event) + } + } +} + +extension ObservableType where E: SequenceType { + // `reloadData` - items subscription methods (it's assumed that there is one section, and it is typed `Void`) + + public func subscribeItemsOf(tableView: UITableView, cellFactory: (UITableView, Int, E.Generator.Element) -> UITableViewCell) + -> Disposable { + let dataSource = RxTableViewReactiveArrayDataSourceSequenceWrapper(cellFactory: cellFactory) + return self.subscribe(tableView, withReactiveDataSource: dataSource) + } + + public func subscribeItemsOf(tableView: UITableView, withCellIdentifier cellIdentifier: String, configureCell: (Int, E.Generator.Element, Cell) -> Void) + -> Disposable { + let dataSource = RxTableViewReactiveArrayDataSourceSequenceWrapper { (tv, i, item) in + let indexPath = NSIndexPath(forItem: i, inSection: 0) + let cell = tv.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! Cell + configureCell(i, item, cell) + return cell + } + + return self.subscribe(tableView, withReactiveDataSource: dataSource) + } +} + extension UITableView { // factories @@ -33,85 +76,39 @@ extension UITableView { return installDelegate(proxy, delegate: dataSource, retainDelegate: false, onProxyForObject: self) } - // data source - - // Registers reactive data source with table view. - // Difference between reactive data source and UITableViewDataSource is that reactive - // has additional method: - // - // ``` - // func tableView(tableView: UITableView, observedEvent: Event) -> Void - // ``` - // - // If you want to register non reactive data source, please use `rx_setDataSource` method - public func rx_subscribeWithReactiveDataSource> - (dataSource: DataSource) - -> Observable -> Disposable { - return setProxyDataSourceForObject(self, dataSource: dataSource, retainDataSource: false) { (_: RxTableViewDataSourceProxy, event) -> Void in - dataSource.tableView(self, observedEvent: event) - } - } - - // `reloadData` - items subscription methods (it's assumed that there is one section, and it is typed `Void`) - - public func rx_subscribeItemsTo - (cellFactory: (UITableView, Int, Item) -> UITableViewCell) - -> Observable<[Item]> -> Disposable { - return { source in - let dataSource = RxTableViewReactiveArrayDataSource(cellFactory: cellFactory) - - return self.rx_subscribeWithReactiveDataSource(dataSource)(source) - } - } - - public func rx_subscribeItemsToWithCellIdentifier - (cellIdentifier: String, configureCell: (NSIndexPath, Item, Cell) -> Void) - -> Observable<[Item]> -> Disposable { - return { source in - let dataSource = RxTableViewReactiveArrayDataSource { (tv, i, item) in - let indexPath = NSIndexPath(forItem: i, inSection: 0) - let cell = tv.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! Cell - configureCell(indexPath, item, cell) - return cell - } - - return self.rx_subscribeWithReactiveDataSource(dataSource)(source) - } - } - // events public var rx_itemSelected: Observable { return rx_delegate.observe("tableView:didSelectRowAtIndexPath:") - >- map { a in + .map { a in return a[1] as! NSIndexPath } } public var rx_itemInserted: Observable { return rx_dataSource.observe("tableView:commitEditingStyle:forRowAtIndexPath:") - >- filter { a in + .filter { a in return UITableViewCellEditingStyle(rawValue: (a[1] as! NSNumber).integerValue) == .Insert } - >- map { a in + .map { a in return (a[2] as! NSIndexPath) } } public var rx_itemDeleted: Observable { return rx_dataSource.observe("tableView:commitEditingStyle:forRowAtIndexPath:") - >- filter { a in + .filter { a in return UITableViewCellEditingStyle(rawValue: (a[1] as! NSNumber).integerValue) == .Delete } - >- map { a in + .map { a in return (a[2] as! NSIndexPath) } } public var rx_itemMoved: Observable { return rx_dataSource.observe("tableView:moveRowAtIndexPath:toIndexPath:") - >- map { a in + .map { a in return ((a[1] as! NSIndexPath), (a[2] as! NSIndexPath)) } } @@ -119,58 +116,11 @@ extension UITableView { // typed events // This method only works in case one of the `rx_subscribeItemsTo` methods was used. public func rx_modelSelected() -> Observable { - return rx_itemSelected >- map { ip in + return rx_itemSelected .map { ip in let dataSource: RxTableViewReactiveArrayDataSource = castOrFatalError(self.rx_dataSource.forwardToDelegate(), message: "This method only works in case one of the `rx_subscribeItemsTo` methods was used.") return dataSource.modelAtIndex(ip.item)! } } -} - -// deprecated -extension UITableView { - @available(*, deprecated=1.7, message="Replaced by `rx_subscribeWithReactiveDataSource`") - public func rx_subscribeRowsTo - (dataSource: UITableViewDataSource) - (source: Observable<[E]>) - -> Disposable { - return rx_setDataSource(dataSource) - } - - @available(*, deprecated=1.7, message="Replaced by `rx_setDataSource`") - public func rx_subscribeRowsTo - (cellFactory: (UITableView, NSIndexPath, E) -> UITableViewCell) - (source: Observable<[E]>) - -> Disposable { - let l = rx_subscribeItemsTo { (tv: UITableView, i: Int, e: E) -> UITableViewCell in - return cellFactory(tv, NSIndexPath(forItem: i, inSection: 0), e) - } - - return l(source) - } - - @available(*, deprecated=1.7, message="Replaced by `rx_subscribeItemsToWithCellIdentifier`") - public func rx_subscribeRowsToCellWithIdentifier - (cellIdentifier: String, configureCell: (UITableView, NSIndexPath, E, Cell) -> Void) - (source: Observable<[E]>) - -> Disposable { - let l = rx_subscribeItemsToWithCellIdentifier(cellIdentifier) { (ip: NSIndexPath, e: E, c: Cell) -> Void in - configureCell(self, ip, e, c) - } - return l(source) - } - - @available(*, deprecated=1.7, message="Replaced by `rx_itemSelected`") - public func rx_rowTap() -> Observable<(UITableView, Int)> { - return rx_itemSelected - >- map { ip in - return (self, ip.item) - } - } - - @available(*, deprecated=1.7, message="Replaced by `rx_modelSelected`") - public func rx_elementTap() -> Observable { - return rx_modelSelected() - } -} +} \ No newline at end of file diff --git a/RxCocoa/RxCocoa/iOS/UITextView+Rx.swift b/RxCocoa/RxCocoa/iOS/UITextView+Rx.swift index 6120281ff..9c4584d2f 100644 --- a/RxCocoa/RxCocoa/iOS/UITextView+Rx.swift +++ b/RxCocoa/RxCocoa/iOS/UITextView+Rx.swift @@ -21,11 +21,11 @@ extension UITextView { public var rx_text: Observable { return deferred { [weak self] in let text = self?.text ?? "" - return self?.rx_delegate.observe("textViewDidChange:") ?? empty() - >- map { a in + return (self?.rx_delegate.observe("textViewDidChange:") ?? empty()) + .map { a in return (a[0] as? UITextView)?.text ?? "" } - >- startWith(text) + .startWith(text) } } diff --git a/RxExample/RxExample.xcodeproj/project.pbxproj b/RxExample/RxExample.xcodeproj/project.pbxproj index def638f78..1688bf6a7 100644 --- a/RxExample/RxExample.xcodeproj/project.pbxproj +++ b/RxExample/RxExample.xcodeproj/project.pbxproj @@ -352,7 +352,7 @@ C8297E7F1B6CF94B000589EA /* PeriodicScheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeriodicScheduler.swift; sourceTree = ""; }; C8297E801B6CF94B000589EA /* BehaviorSubject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BehaviorSubject.swift; sourceTree = ""; }; C8297E811B6CF94B000589EA /* ConnectableObservableType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConnectableObservableType.swift; sourceTree = ""; }; - C8297E821B6CF94B000589EA /* PublishSubject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = PublishSubject.swift; sourceTree = ""; }; + C8297E821B6CF94B000589EA /* PublishSubject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = PublishSubject.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; C8297E831B6CF94B000589EA /* ReplaySubject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReplaySubject.swift; sourceTree = ""; }; C8297E841B6CF94B000589EA /* SubjectType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SubjectType.swift; sourceTree = ""; }; C8297E851B6CF94B000589EA /* Variable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Variable.swift; sourceTree = ""; }; @@ -446,8 +446,8 @@ C8297F551B6CF953000589EA /* RxCLLocationManagerDelegateProxy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = RxCLLocationManagerDelegateProxy.swift; sourceTree = ""; }; C8297F571B6CF953000589EA /* ControlTarget.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ControlTarget.swift; sourceTree = ""; }; C8297F581B6CF953000589EA /* Deallocating.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Deallocating.swift; sourceTree = ""; }; - C8297F591B6CF953000589EA /* KVOObservable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = KVOObservable.swift; sourceTree = ""; }; - C8297F5A1B6CF953000589EA /* KVOObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = KVOObserver.swift; sourceTree = ""; }; + C8297F591B6CF953000589EA /* KVOObservable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = KVOObservable.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + C8297F5A1B6CF953000589EA /* KVOObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = KVOObserver.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; C8297F5B1B6CF953000589EA /* DeinitAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeinitAction.swift; sourceTree = ""; }; C8297F5D1B6CF953000589EA /* NSObject+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "NSObject+Rx.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; C8297F5E1B6CF953000589EA /* NSObject+Rx+CoreGraphics.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "NSObject+Rx+CoreGraphics.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; @@ -483,23 +483,23 @@ C8297F871B6CF953000589EA /* ItemEvents.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemEvents.swift; sourceTree = ""; }; C8297F891B6CF953000589EA /* CoreDataEntityEvent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = CoreDataEntityEvent.swift; sourceTree = ""; }; C8297F8A1B6CF953000589EA /* NSManagedObjectContext+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "NSManagedObjectContext+Rx.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - C8297F8B1B6CF953000589EA /* UIBarButtonItem+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UIBarButtonItem+Rx.swift"; sourceTree = ""; }; + C8297F8B1B6CF953000589EA /* UIBarButtonItem+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UIBarButtonItem+Rx.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; C8297F8C1B6CF953000589EA /* UIButton+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UIButton+Rx.swift"; sourceTree = ""; }; - C8297F8D1B6CF953000589EA /* UICollectionView+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UICollectionView+Rx.swift"; sourceTree = ""; }; - C8297F8E1B6CF953000589EA /* UIControl+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UIControl+Rx.swift"; sourceTree = ""; }; + C8297F8D1B6CF953000589EA /* UICollectionView+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UICollectionView+Rx.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + C8297F8E1B6CF953000589EA /* UIControl+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UIControl+Rx.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; C8297F8F1B6CF953000589EA /* UIDatePicker+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UIDatePicker+Rx.swift"; sourceTree = ""; }; C8297F901B6CF953000589EA /* UIImageView+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UIImageView+Rx.swift"; sourceTree = ""; }; - C8297F911B6CF953000589EA /* UILabel+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UILabel+Rx.swift"; sourceTree = ""; }; + C8297F911B6CF953000589EA /* UILabel+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UILabel+Rx.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; C8297F921B6CF953000589EA /* UIScrollView+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UIScrollView+Rx.swift"; sourceTree = ""; }; - C8297F931B6CF953000589EA /* UISearchBar+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UISearchBar+Rx.swift"; sourceTree = ""; }; + C8297F931B6CF953000589EA /* UISearchBar+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UISearchBar+Rx.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; C8297F941B6CF953000589EA /* UISlider+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UISlider+Rx.swift"; sourceTree = ""; }; - C8297F951B6CF953000589EA /* UITableView+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UITableView+Rx.swift"; sourceTree = ""; }; - C8297F961B6CF953000589EA /* UITextField+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UITextField+Rx.swift"; sourceTree = ""; }; - C8297F971B6CF953000589EA /* UITextView+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UITextView+Rx.swift"; sourceTree = ""; }; - C8297F981B6CF953000589EA /* UIGestureRecognizer+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UIGestureRecognizer+Rx.swift"; sourceTree = ""; }; - C8297F991B6CF953000589EA /* UIActionSheet+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UIActionSheet+Rx.swift"; sourceTree = ""; }; - C8297F9A1B6CF953000589EA /* UIAlertView+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UIAlertView+Rx.swift"; sourceTree = ""; }; - C8297F9B1B6CF953000589EA /* UISegmentedControl+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UISegmentedControl+Rx.swift"; sourceTree = ""; }; + C8297F951B6CF953000589EA /* UITableView+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UITableView+Rx.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + C8297F961B6CF953000589EA /* UITextField+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UITextField+Rx.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + C8297F971B6CF953000589EA /* UITextView+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UITextView+Rx.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + C8297F981B6CF953000589EA /* UIGestureRecognizer+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UIGestureRecognizer+Rx.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + C8297F991B6CF953000589EA /* UIActionSheet+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UIActionSheet+Rx.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + C8297F9A1B6CF953000589EA /* UIAlertView+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UIAlertView+Rx.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + C8297F9B1B6CF953000589EA /* UISegmentedControl+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UISegmentedControl+Rx.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; C8297F9C1B6CF953000589EA /* UISwitch+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UISwitch+Rx.swift"; sourceTree = ""; }; C8297F9E1B6CF953000589EA /* RxCocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxCocoa.h; sourceTree = ""; }; C8297F9F1B6CF953000589EA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -1750,6 +1750,7 @@ COMBINE_HIDPI_IMAGES = YES; INFOPLIST_FILE = "RxExample/Info-OSX.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks @executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.10; OTHER_LDFLAGS = "-objc_loadall"; SDKROOT = macosx; }; @@ -1761,6 +1762,7 @@ COMBINE_HIDPI_IMAGES = YES; INFOPLIST_FILE = "RxExample/Info-OSX.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks @executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.10; OTHER_LDFLAGS = "-objc_loadall"; SDKROOT = macosx; }; @@ -1826,6 +1828,7 @@ COMBINE_HIDPI_IMAGES = YES; INFOPLIST_FILE = "RxExample/Info-OSX.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks @executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.10; OTHER_LDFLAGS = "-objc_loadall"; SDKROOT = macosx; }; diff --git a/RxExample/RxExample/Examples/APIWrappers/APIWrappersViewController.swift b/RxExample/RxExample/Examples/APIWrappers/APIWrappersViewController.swift index 07ab3dcf9..45dfb6952 100644 --- a/RxExample/RxExample/Examples/APIWrappers/APIWrappersViewController.swift +++ b/RxExample/RxExample/Examples/APIWrappers/APIWrappersViewController.swift @@ -62,57 +62,57 @@ class APIWrappersViewController: ViewController { let av = UIAlertView(title: "Title", message: "The message", delegate: nil, cancelButtonTitle: "Cancel", otherButtonTitles: "OK", "Two", "Three", "Four", "Five") openActionSheet.rx_tap - >- subscribeNext { x in + .subscribeNext { x in ash.showInView(self.view) } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) openAlertView.rx_tap - >- subscribeNext { x in + .subscribeNext { x in av.show() } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) // MARK: UIActionSheet ash.rx_clickedButtonAtIndex - >- subscribeNext { [weak self] x in + .subscribeNext { [weak self] x in self?.debug("UIActionSheet clickedButtonAtIndex \(x)") } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) ash.rx_willDismissWithButtonIndex - >- subscribeNext { [weak self] x in + .subscribeNext { [weak self] x in self?.debug("UIActionSheet willDismissWithButtonIndex \(x)") } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) ash.rx_didDismissWithButtonIndex - >- subscribeNext { [weak self] x in + .subscribeNext { [weak self] x in self?.debug("UIActionSheet didDismissWithButtonIndex \(x)") } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) // MARK: UIAlertView av.rx_clickedButtonAtIndex - >- subscribeNext { [weak self] x in + .subscribeNext { [weak self] x in self?.debug("UIAlertView clickedButtonAtIndex \(x)") } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) av.rx_willDismissWithButtonIndex - >- subscribeNext { [weak self] x in + .subscribeNext { [weak self] x in self?.debug("UIAlertView willDismissWithButtonIndex \(x)") } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) av.rx_didDismissWithButtonIndex - >- subscribeNext { [weak self] x in + .subscribeNext { [weak self] x in self?.debug("UIAlertView didDismissWithButtonIndex \(x)") } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) @@ -123,73 +123,73 @@ class APIWrappersViewController: ViewController { // MARK: UIBarButtonItem bbitem.rx_tap - >- subscribeNext { [weak self] x in + .subscribeNext { [weak self] x in self?.debug("UIBarButtonItem Tapped") } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) // MARK: UISegmentedControl segmentedControl.rx_value - >- subscribeNext { [weak self] x in + .subscribeNext { [weak self] x in self?.debug("UISegmentedControl value \(x)") } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) // MARK: UISwitch switcher.rx_value - >- subscribeNext { [weak self] x in + .subscribeNext { [weak self] x in self?.debug("UISwitch value \(x)") } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) // MARK: UIButton button.rx_tap - >- subscribeNext { [weak self] x in + .subscribeNext { [weak self] x in self?.debug("UIButton Tapped") } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) // MARK: UISlider slider.rx_value - >- subscribeNext { [weak self] x in + .subscribeNext { [weak self] x in self?.debug("UISlider value \(x)") } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) // MARK: UIDatePicker datePicker.rx_date - >- subscribeNext { [weak self] x in + .subscribeNext { [weak self] x in self?.debug("UIDatePicker date \(x)") } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) // MARK: UITextField textField.rx_text - >- subscribeNext { [weak self] x in + .subscribeNext { [weak self] x in self?.debug("UITextField text \(x)") self?.textField.resignFirstResponder() } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) // MARK: UIGestureRecognizer mypan.rx_event - >- subscribeNext { [weak self] x in + .subscribeNext { [weak self] x in self?.debug("UIGestureRecognizer event \(x.state)") } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) // MARK: CLLocationManager @@ -201,16 +201,16 @@ class APIWrappersViewController: ViewController { } manager.rx_didUpdateLocations - >- subscribeNext { [weak self] x in + .subscribeNext { [weak self] x in self?.debug("rx_didUpdateLocations \(x)") } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) manager.rx_didFailWithError - >- subscribeNext { [weak self] x in + .subscribeNext { [weak self] x in self?.debug("rx_didFailWithError \(x)") } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) manager.startUpdatingLocation() diff --git a/RxExample/RxExample/Examples/GitHubSignup/GitHubAPI/GitHubAPI.swift b/RxExample/RxExample/Examples/GitHubSignup/GitHubAPI/GitHubAPI.swift index 1ce9a00b2..4665373c1 100644 --- a/RxExample/RxExample/Examples/GitHubSignup/GitHubAPI/GitHubAPI.swift +++ b/RxExample/RxExample/Examples/GitHubSignup/GitHubAPI/GitHubAPI.swift @@ -46,7 +46,7 @@ class GitHubAPI { let URL = NSURL(string: "https://github.com/\(URLEscape(username))")! let request = NSURLRequest(URL: URL) return self.URLSession.rx_response(request) - >- map { (maybeData, maybeResponse) in + .map { (maybeData, maybeResponse) in if let response = maybeResponse as? NSHTTPURLResponse { return response.statusCode == 404 } @@ -54,17 +54,15 @@ class GitHubAPI { return false } } - >- observeSingleOn(self.dataScheduler) - >- onError { result in - return just(false) - } + .observeSingleOn(self.dataScheduler) + .catchError(false) } func signup(username: String, password: String) -> Observable { // this is also just a mock let signupResult = SignupState.SignedUp(signedUp: arc4random() % 5 == 0 ? false : true) return concat([just(signupResult), never()]) - >- throttle(5, MainScheduler.sharedInstance) - >- startWith(SignupState.SigningUp) + .throttle(5, MainScheduler.sharedInstance) + .startWith(SignupState.SigningUp) } } \ No newline at end of file diff --git a/RxExample/RxExample/Examples/GitHubSignup/Views/GitHubSignupViewController.swift b/RxExample/RxExample/Examples/GitHubSignup/Views/GitHubSignupViewController.swift index a6b14888a..43b91466d 100644 --- a/RxExample/RxExample/Examples/GitHubSignup/Views/GitHubSignupViewController.swift +++ b/RxExample/RxExample/Examples/GitHubSignup/Views/GitHubSignupViewController.swift @@ -43,7 +43,7 @@ class ValidationService { let loadingValue = (valid: nil as Bool?, message: "Checking availabilty ..." as String?) return API.usernameAvailable(username) - >- map { available in + .map { available in if available { return (true, "Username available") } @@ -51,7 +51,7 @@ class ValidationService { return (false, "Username already taken") } } - >- startWith(loadingValue) + .startWith(loadingValue) } func validatePassword(password: String) -> ValidationResult { @@ -103,19 +103,21 @@ class GitHubSignupViewController : ViewController { func bindValidationResultToUI(source: Observable<(valid: Bool?, message: String?)>, validationErrorLabel: UILabel) { - source >- subscribeNext { [unowned self] v in - let validationColor: UIColor - - if let valid = v.valid { - validationColor = valid ? okColor : errorColor - } - else { - validationColor = UIColor.grayColor() + source + .subscribeNext { [unowned self] v in + let validationColor: UIColor + + if let valid = v.valid { + validationColor = valid ? okColor : errorColor + } + else { + validationColor = UIColor.grayColor() + } + + validationErrorLabel.textColor = validationColor + validationErrorLabel.text = v.message ?? "" } - - validationErrorLabel.textColor = validationColor - validationErrorLabel.text = v.message ?? "" - } >- disposeBag.addDisposable + .addDisposableTo(disposeBag) } func dismissKeyboard(gr: UITapGestureRecognizer) { @@ -141,31 +143,31 @@ class GitHubSignupViewController : ViewController { let signupSampler = self.signupOutlet.rx_tap let usernameValidation = username - >- map { username in + .map { username in return validationService.validateUsername(username) } - >- switchLatest - >- variable + .switchLatest + .variable let passwordValidation = password - >- map { password in + .map { password in return validationService.validatePassword(password) } - >- variable + .variable let repeatPasswordValidation = combineLatest(password, repeatPassword) { (password, repeatedPassword) in validationService.validateRepeatedPassword(password, repeatedPassword: repeatedPassword) } - >- variable + .variable let signingProcess = combineLatest(username, password) { ($0, $1) } - >- sampleLatest(signupSampler) - >- map { (username, password) in + .sampleLatest(signupSampler) + .map { (username, password) in return API.signup(username, password: password) } - >- switchLatest - >- startWith(.InitialState) - >- variable + .switchLatest + .startWith(.InitialState) + .variable let signupEnabled = combineLatest( usernameValidation, @@ -192,15 +194,15 @@ class GitHubSignupViewController : ViewController { ) signupEnabled - >- subscribeNext { [unowned self] valid in + .subscribeNext { [unowned self] valid in self.signupOutlet.enabled = valid self.signupOutlet.alpha = valid ? 1.0 : 0.5 } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) signingProcess - >- subscribeNext { [unowned self] signingResult in + .subscribeNext { [unowned self] signingResult in switch signingResult { case .SigningUp: self.signingUpOulet.hidden = false @@ -221,7 +223,7 @@ class GitHubSignupViewController : ViewController { self.signingUpOulet.hidden = true } } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) } // This is one of the reasons why it's a good idea for disposal to be detached from allocations. diff --git a/RxExample/RxExample/Examples/Introduction/IntroductionExampleViewController.swift b/RxExample/RxExample/Examples/Introduction/IntroductionExampleViewController.swift index 18e209ba1..021d36ca5 100644 --- a/RxExample/RxExample/Examples/Introduction/IntroductionExampleViewController.swift +++ b/RxExample/RxExample/Examples/Introduction/IntroductionExampleViewController.swift @@ -33,49 +33,49 @@ class IntroductionExampleViewController : ViewController { // bind result to UI sum - >- map { (a, b) in + .map { (a, b) in return "\(a + b)" } - >- c.rx_subscribeTextTo - >- disposeBag.addDisposable + .subscribeTextOf(c) + .addDisposableTo(disposeBag) // Also, tell it out loud let speech = NSSpeechSynthesizer() sum - >- map { (a, b) in + .map { (a, b) in return "\(a) + \(b) = \(a + b)" } - >- subscribeNext { result in + .subscribeNext { result in if speech.speaking { speech.stopSpeaking() } speech.startSpeakingString(result) } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) slider.rx_value - >- subscribeNext { value in + .subscribeNext { value in self.sliderValue.stringValue = "\(Int(value))" } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) sliderValue.rx_text - >- subscribeNext { value in + .subscribeNext { value in let doubleValue = value.toDouble() ?? 0.0 self.slider.doubleValue = doubleValue self.sliderValue.stringValue = "\(Int(doubleValue))" } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) disposeButton.rx_tap - >- subscribeNext { [unowned self] _ in + .subscribeNext { [unowned self] _ in print("Unbound everything") self.disposeBag = DisposeBag() } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) } } \ No newline at end of file diff --git a/RxExample/RxExample/Examples/PartialUpdates/PartialUpdatesViewController.swift b/RxExample/RxExample/Examples/PartialUpdates/PartialUpdatesViewController.swift index ee2702286..2761c6aaf 100644 --- a/RxExample/RxExample/Examples/PartialUpdates/PartialUpdatesViewController.swift +++ b/RxExample/RxExample/Examples/PartialUpdates/PartialUpdatesViewController.swift @@ -109,14 +109,14 @@ class PartialUpdatesViewController : ViewController { timer = NSTimer.scheduledTimerWithTimeInterval(0.6, target: self, selector: "randomize", userInfo: nil, repeats: true) #endif - self.sections.next(generator.sections) + self.sections.sendNext(generator.sections) let tvAnimatedDataSource = RxTableViewSectionedAnimatedDataSource() let reloadDataSource = RxTableViewSectionedReloadDataSource() skinTableViewDataSource(tvAnimatedDataSource) skinTableViewDataSource(reloadDataSource) - let newSections = self.sections >- skip(1) + let newSections = self.sections .skip(1) let initialState = [Changeset.initialValue(self.sections.value)] @@ -125,15 +125,15 @@ class PartialUpdatesViewController : ViewController { let updates = zip(self.sections, newSections) { (old, new) in return differentiate(old, finalSections: new) } - >- startWith(initialState) + .startWith(initialState) updates - >- partialUpdatesTableViewOutlet.rx_subscribeWithReactiveDataSource(tvAnimatedDataSource) - >- disposeBag.addDisposable + .partialUpdatesTableViewOutlet.rx_subscribeWithReactiveDataSource(tvAnimatedDataSource) + .disposeBag.addDisposable self.sections - >- reloadTableViewOutlet.rx_subscribeWithReactiveDataSource(reloadDataSource) - >- disposeBag.addDisposable + .reloadTableViewOutlet.rx_subscribeWithReactiveDataSource(reloadDataSource) + .disposeBag.addDisposable // Collection view logic works, but when clicking fast because of internal bugs // collection view will sometimes get confused. I know what you are thinking, @@ -152,29 +152,29 @@ class PartialUpdatesViewController : ViewController { skinCollectionViewDataSource(cvAnimatedDataSource) updates - >- partialUpdatesCollectionViewOutlet.rx_subscribeWithReactiveDataSource(cvAnimatedDataSource) - >- disposeBag.addDisposable + .partialUpdatesCollectionViewOutlet.rx_subscribeWithReactiveDataSource(cvAnimatedDataSource) + .disposeBag.addDisposable #else let cvReloadDataSource = RxCollectionViewSectionedReloadDataSource() skinCollectionViewDataSource(cvReloadDataSource) self.sections - >- partialUpdatesCollectionViewOutlet.rx_subscribeWithReactiveDataSource(cvReloadDataSource) - >- disposeBag.addDisposable + .partialUpdatesCollectionViewOutlet.rx_subscribeWithReactiveDataSource(cvReloadDataSource) + .disposeBag.addDisposable #endif // touches partialUpdatesCollectionViewOutlet.rx_itemSelected - >- subscribeNext { [unowned self] i in + .subscribeNext { [unowned self] i in print("Let me guess, it's .... It's \(self.generator.sections[i.section].items[i.item]), isn't it? Yeah, I've got it.") } - >- disposeBag.addDisposable + .disposeBag.addDisposable merge(from([partialUpdatesTableViewOutlet.rx_itemSelected, reloadTableViewOutlet.rx_itemSelected])) - >- subscribeNext { [unowned self] i in + .subscribeNext { [unowned self] i in print("I have a feeling it's .... \(self.generator.sections[i.section].items[i.item])?") } - >- disposeBag.addDisposable + .disposeBag.addDisposable } override func viewWillDisappear(animated: Bool) { @@ -192,6 +192,6 @@ class PartialUpdatesViewController : ViewController { //print(values) - sections.next(values) + sections.sendNext(values) }*/ } diff --git a/RxExample/RxExample/Examples/TableView/DetailViewController.swift b/RxExample/RxExample/Examples/TableView/DetailViewController.swift index 84c76a86e..4a2d9bdab 100644 --- a/RxExample/RxExample/Examples/TableView/DetailViewController.swift +++ b/RxExample/RxExample/Examples/TableView/DetailViewController.swift @@ -32,12 +32,12 @@ class DetailViewController: ViewController { let request = NSURLRequest(URL: url) NSURLSession.sharedSession().rx_data(request) - >- map { data in + .map { data in UIImage(data: data) } - >- observeSingleOn($.mainScheduler) - >- imageView.rx_subscribeImageTo - >- disposeBag.addDisposable + .observeSingleOn($.mainScheduler) + .subscribeImageOf(imageView) + .addDisposableTo(disposeBag) label.text = user.firstName + " " + user.lastName } diff --git a/RxExample/RxExample/Examples/TableView/RandomUserAPI.swift b/RxExample/RxExample/Examples/TableView/RandomUserAPI.swift index 9f416f79c..948465105 100644 --- a/RxExample/RxExample/Examples/TableView/RandomUserAPI.swift +++ b/RxExample/RxExample/Examples/TableView/RandomUserAPI.swift @@ -20,13 +20,13 @@ class RandomUserAPI { func getExampleUserResultSet() -> Observable<[User]> { let url = NSURL(string: "http://api.randomuser.me/?results=20")! return NSURLSession.sharedSession().rx_JSON(url) - >- observeSingleOn(Dependencies.sharedDependencies.backgroundWorkScheduler) - >- mapOrDie { json in + .observeSingleOn(Dependencies.sharedDependencies.backgroundWorkScheduler) + .mapOrDie { json in return castOrFail(json).flatMap { (json: [String: AnyObject]) in return self.parseJSON(json) } } - >- observeSingleOn(Dependencies.sharedDependencies.mainScheduler) + .observeSingleOn(Dependencies.sharedDependencies.mainScheduler) } private func parseJSON(json: [String: AnyObject]) -> RxResult<[User]> { diff --git a/RxExample/RxExample/Examples/TableView/TableViewController.swift b/RxExample/RxExample/Examples/TableView/TableViewController.swift index d5fdc8dee..0b3aa6d26 100644 --- a/RxExample/RxExample/Examples/TableView/TableViewController.swift +++ b/RxExample/RxExample/Examples/TableView/TableViewController.swift @@ -43,10 +43,10 @@ class TableViewController: ViewController, UITableViewDelegate { // This is for demonstration purposes of UITableViewDelegate/DataSource // only, try to not do something like this in your app allUsers - >- subscribeNext { [unowned self] n in + .subscribeNext { [unowned self] n in self.allSections = n } - >- disposeBag.addDisposable + .disposeBag.addDisposable dataSource.cellFactory = { (tv, ip, user: User) in let cell = tv.dequeueReusableCellWithIdentifier("Cell")! @@ -60,45 +60,45 @@ class TableViewController: ViewController, UITableViewDelegate { // reactive data source allUsers - >- tableView.rx_subscribeWithReactiveDataSource(dataSource) - >- disposeBag.addDisposable + .tableView.rx_subscribeWithReactiveDataSource(dataSource) + .disposeBag.addDisposable // customization using delegate // RxTableViewDelegateBridge will forward correct messages tableView.rx_setDelegate(self) - >- disposeBag.addDisposable + .disposeBag.addDisposable tableView.rx_itemSelected - >- subscribeNext { [unowned self] indexPath in + .subscribeNext { [unowned self] indexPath in self.showDetailsForUserAtIndexPath(indexPath) } - >- disposeBag.addDisposable + .disposeBag.addDisposable tableView.rx_itemDeleted - >- subscribeNext { [unowned self] indexPath in + .subscribeNext { [unowned self] indexPath in self.removeUser(indexPath) } - >- disposeBag.addDisposable + .disposeBag.addDisposable tableView.rx_itemMoved - >- subscribeNext { [unowned self] (s, d) in + .subscribeNext { [unowned self] (s, d) in self.moveUserFrom(s, to: d) } - >- disposeBag.addDisposable + .disposeBag.addDisposable // Rx content offset tableView.rx_contentOffset - >- subscribeNext { co in + .subscribeNext { co in print("Content offset from Rx observer \(co)") } RandomUserAPI.sharedAPI.getExampleUserResultSet() - >- subscribeNext { [unowned self] array in - self.users.next(array) + .subscribeNext { [unowned self] array in + self.users.sendNext(array) } - >- disposeBag.addDisposable + .disposeBag.addDisposable - favoriteUsers.next([User(firstName: "Super", lastName: "Man", imageURL: "http://nerdreactor.com/wp-content/uploads/2015/02/Superman1.jpg")]) + favoriteUsers.sendNext([User(firstName: "Super", lastName: "Man", imageURL: "http://nerdreactor.com/wp-content/uploads/2015/02/Superman1.jpg")]) } override func setEditing(editing: Bool, animated: Bool) { @@ -162,11 +162,11 @@ class TableViewController: ViewController, UITableViewDelegate { case 0: fromArray = favoriteUsers.value user = fromArray.removeAtIndex(from.row) - favoriteUsers.next(fromArray) + favoriteUsers.sendNext(fromArray) case 1: fromArray = users.value user = fromArray.removeAtIndex(from.row) - users.next(fromArray) + users.sendNext(fromArray) default: fatalError("Section out of range") } @@ -176,11 +176,11 @@ class TableViewController: ViewController, UITableViewDelegate { case 0: toArray = favoriteUsers.value toArray.insert(user, atIndex: to.row) - favoriteUsers.next(toArray) + favoriteUsers.sendNext(toArray) case 1: toArray = users.value toArray.insert(user, atIndex: to.row) - users.next(toArray) + users.sendNext(toArray) default: fatalError("Section out of range") } @@ -189,7 +189,7 @@ class TableViewController: ViewController, UITableViewDelegate { func addUser(user: User) { var array = users.value array.append(user) - users.next(array) + users.sendNext(array) } func removeUser(indexPath: NSIndexPath) { @@ -198,11 +198,11 @@ class TableViewController: ViewController, UITableViewDelegate { case 0: array = favoriteUsers.value array.removeAtIndex(indexPath.row) - favoriteUsers.next(array) + favoriteUsers.sendNext(array) case 1: array = users.value array.removeAtIndex(indexPath.row) - users.next(array) + users.sendNext(array) default: fatalError("Section out of range") } diff --git a/RxExample/RxExample/Examples/WikipediaImageSearch/ViewModels/SearchResultViewModel.swift b/RxExample/RxExample/Examples/WikipediaImageSearch/ViewModels/SearchResultViewModel.swift index 8b580f72c..de463300d 100644 --- a/RxExample/RxExample/Examples/WikipediaImageSearch/ViewModels/SearchResultViewModel.swift +++ b/RxExample/RxExample/Examples/WikipediaImageSearch/ViewModels/SearchResultViewModel.swift @@ -29,8 +29,8 @@ class SearchResultViewModel { let URLs = configureImageURLs() - self.imageURLs = URLs >- onError ([]) - self.title = configureTitle(URLs) >- onError("Error during fetching") + self.imageURLs = URLs.catchError ([]) + self.title = configureTitle(URLs).catchError("Error during fetching") } // private methods @@ -41,9 +41,9 @@ class SearchResultViewModel { let loadingValue: [NSURL]? = nil return imageURLs - >- map { makeOptional($0) } - >- startWith(loadingValue) - >- map { URLs in + .map { makeOptional($0) } + .startWith(loadingValue) + .map { URLs in if let URLs = URLs { return "\(searchResult.title) (\(URLs.count)) pictures)" } @@ -56,15 +56,15 @@ class SearchResultViewModel { func configureImageURLs() -> Observable<[NSURL]> { let searchResult = self.searchResult return API.articleContent(searchResult) - >- observeSingleOn($.backgroundWorkScheduler) - >- map { page in + .observeSingleOn($.backgroundWorkScheduler) + .map { page in do { return try parseImageURLsfromHTMLSuitableForDisplay(page.text) } catch { return [] } } - >- observeSingleOn($.mainScheduler) - >- variable + .observeSingleOn($.mainScheduler) + .variable } } \ No newline at end of file diff --git a/RxExample/RxExample/Examples/WikipediaImageSearch/ViewModels/SearchViewModel.swift b/RxExample/RxExample/Examples/WikipediaImageSearch/ViewModels/SearchViewModel.swift index ed723c665..39a5b9ba8 100644 --- a/RxExample/RxExample/Examples/WikipediaImageSearch/ViewModels/SearchViewModel.swift +++ b/RxExample/RxExample/Examples/WikipediaImageSearch/ViewModels/SearchViewModel.swift @@ -12,12 +12,12 @@ import RxSwift import RxCocoa #endif -class SearchViewModel: Disposable { +class SearchViewModel { // outputs let rows: Observable<[SearchResultViewModel]> - let subscriptions = CompositeDisposable() + let subscriptions = DisposeBag() // public methods @@ -29,31 +29,28 @@ class SearchViewModel: Disposable { let API = DefaultWikipediaAPI.sharedAPI self.rows = searchText - >- throttle(0.3, $.mainScheduler) - >- distinctUntilChanged - >- map { query in + .throttle(0.3, $.mainScheduler) + .distinctUntilChanged() + .map { query in API.getSearchResults(query) - >- retry(3) - >- startWith([]) // clears results on new search term - >- onError ([]) + .retry(3) + .startWith([]) // clears results on new search term + .catchError([]) } - >- switchLatest - >- map { results in + .switchLatest + .map { results in results.map { SearchResultViewModel( searchResult: $0 ) } - } + } selectedResult - >- subscribeNext { searchResult in + .subscribeNext { searchResult in wireframe.openURL(searchResult.searchResult.URL) } - >- subscriptions.addDisposable + .addDisposableTo(subscriptions) } - func dispose() { - subscriptions.dispose() - } } \ No newline at end of file diff --git a/RxExample/RxExample/Examples/WikipediaImageSearch/Views/CollectionViewImageCell.swift b/RxExample/RxExample/Examples/WikipediaImageSearch/Views/CollectionViewImageCell.swift index e83c254fc..74f86e660 100644 --- a/RxExample/RxExample/Examples/WikipediaImageSearch/Views/CollectionViewImageCell.swift +++ b/RxExample/RxExample/Examples/WikipediaImageSearch/Views/CollectionViewImageCell.swift @@ -22,7 +22,9 @@ public class CollectionViewImageCell: UICollectionViewCell { didSet { let disposeBag = DisposeBag() - self.image >- imageOutlet.rx_subscribeImageTo(true) >- disposeBag.addDisposable + self.image + .subscribeImageOf(imageOutlet, animated: true) + .addDisposableTo(disposeBag) self.disposeBag = disposeBag } diff --git a/RxExample/RxExample/Examples/WikipediaImageSearch/Views/WikipediaSearchCell.swift b/RxExample/RxExample/Examples/WikipediaImageSearch/Views/WikipediaSearchCell.swift index 14f681d36..9522b1d91 100644 --- a/RxExample/RxExample/Examples/WikipediaImageSearch/Views/WikipediaSearchCell.swift +++ b/RxExample/RxExample/Examples/WikipediaImageSearch/Views/WikipediaSearchCell.swift @@ -35,19 +35,22 @@ public class WikipediaSearchCell: UITableViewCell { let disposeBag = DisposeBag() - self.titleOutlet.rx_subscribeTextTo(viewModel?.title ?? just("")) >- disposeBag.addDisposable + (viewModel?.title ?? just("")) + .subscribeTextOf(self.titleOutlet) + .addDisposableTo(disposeBag) + self.URLOutlet.text = viewModel.searchResult.URL.absoluteString ?? "" viewModel.imageURLs - >- self.imagesOutlet.rx_subscribeItemsToWithCellIdentifier("ImageCell") { [unowned self] (_, URL, cell: CollectionViewImageCell) in + .subscribeItemsOf(self.imagesOutlet, withCellIdentifier: "ImageCell") { [unowned self] (_, URL, cell: CollectionViewImageCell) in let loadingPlaceholder: UIImage? = nil cell.image = self.imageService.imageFromURL(URL) - >- map { $0 as UIImage? } - >- onError(nil) - >- startWith(loadingPlaceholder) + .map { $0 as UIImage? } + .catchError(nil) + .startWith(loadingPlaceholder) } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) self.disposeBag = disposeBag } diff --git a/RxExample/RxExample/Examples/WikipediaImageSearch/Views/WikipediaSearchViewController.swift b/RxExample/RxExample/Examples/WikipediaImageSearch/Views/WikipediaSearchViewController.swift index 6c103d1df..6e2b1c000 100644 --- a/RxExample/RxExample/Examples/WikipediaImageSearch/Views/WikipediaSearchViewController.swift +++ b/RxExample/RxExample/Examples/WikipediaImageSearch/Views/WikipediaSearchViewController.swift @@ -43,24 +43,22 @@ class WikipediaSearchViewController: ViewController { // map table view rows // { viewModel.rows - >- resultsTableView.rx_subscribeItemsToWithCellIdentifier("WikipediaSearchCell") { (_, viewModel, cell: WikipediaSearchCell) in + .subscribeItemsOf(resultsTableView, withCellIdentifier: "WikipediaSearchCell") { (_, viewModel, cell: WikipediaSearchCell) in cell.viewModel = viewModel } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) // } // dismiss keyboard on scroll // { resultsTableView.rx_contentOffset - >- subscribeNext { _ in + .subscribeNext { _ in if searchBar.isFirstResponder() { _ = searchBar.resignFirstResponder() } } - >- disposeBag.addDisposable + .addDisposableTo(disposeBag) - disposeBag.addDisposable(viewModel) - self.viewModel = viewModel // } } diff --git a/RxExample/RxExample/Examples/WikipediaImageSearch/WikipediaAPI/WikipediaAPI.swift b/RxExample/RxExample/Examples/WikipediaImageSearch/WikipediaAPI/WikipediaAPI.swift index a553f3682..56fc26d97 100644 --- a/RxExample/RxExample/Examples/WikipediaImageSearch/WikipediaAPI/WikipediaAPI.swift +++ b/RxExample/RxExample/Examples/WikipediaImageSearch/WikipediaAPI/WikipediaAPI.swift @@ -42,13 +42,13 @@ class DefaultWikipediaAPI: WikipediaAPI { let url = NSURL(string: urlContent)! return $.URLSession.rx_JSON(url) - >- observeSingleOn($.backgroundWorkScheduler) - >- mapOrDie { json in + .observeSingleOn($.backgroundWorkScheduler) + .mapOrDie { json in return castOrFail(json).flatMap { (json: [AnyObject]) in return WikipediaSearchResult.parseJSON(json) } } - >- observeSingleOn($.mainScheduler) + .observeSingleOn($.mainScheduler) } // http://en.wikipedia.org/w/api.php?action=parse&page=rx&format=json @@ -61,11 +61,11 @@ class DefaultWikipediaAPI: WikipediaAPI { } return $.URLSession.rx_JSON(url!) - >- mapOrDie { jsonResult in + .mapOrDie { jsonResult in return castOrFail(jsonResult).flatMap { (json: NSDictionary) in return WikipediaPage.parseJSON(json) } } - >- observeSingleOn($.mainScheduler) + .observeSingleOn($.mainScheduler) } } \ No newline at end of file diff --git a/RxExample/RxExample/Services/ImageService.swift b/RxExample/RxExample/Services/ImageService.swift index 0e494b9ba..41deb5edb 100644 --- a/RxExample/RxExample/Services/ImageService.swift +++ b/RxExample/RxExample/Services/ImageService.swift @@ -41,19 +41,22 @@ class DefaultImageService: ImageService { self.imageCache.countLimit = 20 } - func decodeImage(imageData: Observable) -> Observable { - return imageData >- observeSingleOn($.backgroundWorkScheduler) >- mapOrDie { data in - let maybeImage = Image(data: data) - - if maybeImage == nil { - // some error - return failure(apiError("Decoding image error")) + func decodeImage(imageData: NSData) -> Observable { + return just(imageData) + .observeSingleOn($.backgroundWorkScheduler) + .mapOrDie { data in + let maybeImage = Image(data: data) + + if maybeImage == nil { + // some error + return failure(apiError("Decoding image error")) + } + + let image = maybeImage! + + return success(image) } - - let image = maybeImage! - - return success(image) - } >- observeSingleOn($.mainScheduler) + .observeSingleOn($.mainScheduler) } func imageFromURL(URL: NSURL) -> Observable { @@ -71,17 +74,19 @@ class DefaultImageService: ImageService { // does image data cache contain anything if let cachedData = cachedData { - decodedImage = just(cachedData) >- self.decodeImage + decodedImage = self.decodeImage(cachedData) } else { // fetch from network - decodedImage = self.$.URLSession.rx_data(NSURLRequest(URL: URL)) >- doOnNext { data in - self.imageDataCache.setObject(data, forKey: URL) - } >- self.decodeImage + decodedImage = self.$.URLSession.rx_data(NSURLRequest(URL: URL)) + .doOnNext { data in + self.imageDataCache.setObject(data, forKey: URL) + } + .flatMap(self.decodeImage) } } - return decodedImage >- doOnNext { image in + return decodedImage .doOnNext { image in self.imageCache.setObject(image, forKey: URL) } } diff --git a/RxSwift/RxSwift.xcodeproj/project.pbxproj b/RxSwift/RxSwift.xcodeproj/project.pbxproj index 80ae0debb..0ffb5e9c1 100644 --- a/RxSwift/RxSwift.xcodeproj/project.pbxproj +++ b/RxSwift/RxSwift.xcodeproj/project.pbxproj @@ -108,8 +108,6 @@ C88BB86A1B07E5ED0064D411 /* Rx.h in Headers */ = {isa = PBXBuildFile; fileRef = C8A56B3F1AD7435900B4673B /* Rx.h */; }; C88BB86B1B07E5ED0064D411 /* RxSwift.h in Headers */ = {isa = PBXBuildFile; fileRef = C8A56ADC1AD7424700B4673B /* RxSwift.h */; settings = {ATTRIBUTES = (Public, ); }; }; C88BB86C1B07E5ED0064D411 /* Rx.pch in Headers */ = {isa = PBXBuildFile; fileRef = C8A56B401AD7435900B4673B /* Rx.pch */; }; - C897EC2D1B10D3F4009C2CB0 /* ConnectableObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C897EC2B1B10D3F4009C2CB0 /* ConnectableObservableType.swift */; }; - C897EC2E1B10D3F4009C2CB0 /* ConnectableObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C897EC2B1B10D3F4009C2CB0 /* ConnectableObservableType.swift */; }; C897EC2F1B10D3F4009C2CB0 /* SubjectType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C897EC2C1B10D3F4009C2CB0 /* SubjectType.swift */; }; C897EC301B10D3F4009C2CB0 /* SubjectType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C897EC2C1B10D3F4009C2CB0 /* SubjectType.swift */; }; C897EC321B10D426009C2CB0 /* BehaviorSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = C897EC311B10D426009C2CB0 /* BehaviorSubject.swift */; }; @@ -212,6 +210,10 @@ C8CC5E781B24D7440074DCE0 /* TakeUntil.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8CC5E771B24D7440074DCE0 /* TakeUntil.swift */; }; C8CC5E791B24D7440074DCE0 /* TakeUntil.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8CC5E771B24D7440074DCE0 /* TakeUntil.swift */; }; C8D5592B1AE32FBB00DE7BDB /* Defer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8D5592A1AE32FBB00DE7BDB /* Defer.swift */; }; + C8D6756A1B76AD46005264ED /* ObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8D675691B76AD46005264ED /* ObservableType.swift */; }; + C8D6756B1B76AD46005264ED /* ObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8D675691B76AD46005264ED /* ObservableType.swift */; }; + C8D675701B76BC26005264ED /* ConnectableObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8D6756F1B76BC26005264ED /* ConnectableObservableType.swift */; }; + C8D675711B76BC26005264ED /* ConnectableObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8D6756F1B76BC26005264ED /* ConnectableObservableType.swift */; }; C8DA57E91AEB9F7D0035AF28 /* CombineLatest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8DA57E81AEB9F7D0035AF28 /* CombineLatest.swift */; }; C8FBCF9A1B0FB3DA0091DBFA /* RxBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8FBCF991B0FB3DA0091DBFA /* RxBox.swift */; }; C8FBCF9B1B0FB3DA0091DBFA /* RxBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8FBCF991B0FB3DA0091DBFA /* RxBox.swift */; }; @@ -252,7 +254,6 @@ C87CF6101B1B916500283912 /* Scheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Scheduler.swift; sourceTree = ""; }; C88192851AFEA61A00F0F1ED /* StartWith.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StartWith.swift; sourceTree = ""; }; C88BB8711B07E5ED0064D411 /* RxSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C897EC2B1B10D3F4009C2CB0 /* ConnectableObservableType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConnectableObservableType.swift; sourceTree = ""; }; C897EC2C1B10D3F4009C2CB0 /* SubjectType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SubjectType.swift; sourceTree = ""; }; C897EC311B10D426009C2CB0 /* BehaviorSubject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BehaviorSubject.swift; sourceTree = ""; }; C897EC341B10D8F2009C2CB0 /* PublishSubject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = PublishSubject.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; @@ -338,6 +339,8 @@ C8CC5E741B24AE600074DCE0 /* SafeObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SafeObserver.swift; sourceTree = ""; }; C8CC5E771B24D7440074DCE0 /* TakeUntil.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TakeUntil.swift; sourceTree = ""; }; C8D5592A1AE32FBB00DE7BDB /* Defer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Defer.swift; sourceTree = ""; }; + C8D675691B76AD46005264ED /* ObservableType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObservableType.swift; sourceTree = ""; }; + C8D6756F1B76BC26005264ED /* ConnectableObservableType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConnectableObservableType.swift; sourceTree = ""; }; C8DA57E81AEB9F7D0035AF28 /* CombineLatest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CombineLatest.swift; sourceTree = ""; }; C8FBCF991B0FB3DA0091DBFA /* RxBox.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxBox.swift; sourceTree = ""; }; C8FBCF9C1B0FE2B00091DBFA /* Observer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Observer.swift; sourceTree = ""; }; @@ -386,7 +389,6 @@ isa = PBXGroup; children = ( C897EC311B10D426009C2CB0 /* BehaviorSubject.swift */, - C897EC2B1B10D3F4009C2CB0 /* ConnectableObservableType.swift */, C897EC341B10D8F2009C2CB0 /* PublishSubject.swift */, C8AED7B11B3C66B000678DDE /* ReplaySubject.swift */, C897EC2C1B10D3F4009C2CB0 /* SubjectType.swift */, @@ -420,28 +422,30 @@ C8A56B401AD7435900B4673B /* Rx.pch */, C8A56AFC1AD7435800B4673B /* AnyObject+Rx.swift */, C8A56AFD1AD7435800B4673B /* Cancelable.swift */, + C8D6756F1B76BC26005264ED /* ConnectableObservableType.swift */, C8A56B041AD7435800B4673B /* Disposable.swift */, C8A56B0D1AD7435800B4673B /* Error.swift */, C8A56B0E1AD7435800B4673B /* Event.swift */, + C87CF60F1B1B916500283912 /* ImmediateScheduler.swift */, C8A56B0F1AD7435800B4673B /* Observable.swift */, + C8A56B101AD7435800B4673B /* Observable+Extensions.swift */, + C8D675691B76AD46005264ED /* ObservableType.swift */, C8FBCF9C1B0FE2B00091DBFA /* Observer.swift */, + C8A56B331AD7435800B4673B /* ObserverOf.swift */, C8A56B3D1AD7435900B4673B /* ObserverType.swift */, C80B560D1B2CD4FC008F915D /* ObserverType+Extensions.swift */, - C8A56B101AD7435800B4673B /* Observable+Extensions.swift */, - C8A56B331AD7435800B4673B /* ObserverOf.swift */, - C8A56B3E1AD7435900B4673B /* RxResult.swift */, - C8FBCF991B0FB3DA0091DBFA /* RxBox.swift */, + C8B35B821B234BF7009851DA /* PeriodicScheduler.swift */, C8A56B411AD7435900B4673B /* Rx.swift */, - C87CF60F1B1B916500283912 /* ImmediateScheduler.swift */, + C8FBCF991B0FB3DA0091DBFA /* RxBox.swift */, + C8A56B3E1AD7435900B4673B /* RxResult.swift */, C87CF6101B1B916500283912 /* Scheduler.swift */, - C8B35B821B234BF7009851DA /* PeriodicScheduler.swift */, - C897EC2A1B10D3F4009C2CB0 /* Subjects */, C8A56AFE1AD7435800B4673B /* Concurrency */, C8A56B011AD7435800B4673B /* DataStructures */, C8A56B051AD7435800B4673B /* Disposables */, C8A56B111AD7435800B4673B /* Observables */, C8A56B341AD7435800B4673B /* Observers */, C87CF5F31B1B7EC300283912 /* Schedulers */, + C897EC2A1B10D3F4009C2CB0 /* Subjects */, C8A56ADA1AD7424700B4673B /* Supporting Files */, ); path = RxSwift; @@ -725,6 +729,7 @@ C87CF6061B1B7EC300283912 /* MainScheduler.swift in Sources */, C88BB82B1B07E5ED0064D411 /* Bag.swift in Sources */, C805FC441B6437F80072FB83 /* BooleanDisposable.swift in Sources */, + C8D6756B1B76AD46005264ED /* ObservableType.swift in Sources */, C8FDC5FF1B2B88670065F8D9 /* NAryDisposable.swift in Sources */, C88BB82C1B07E5ED0064D411 /* DisposeBase.swift in Sources */, C8FDC5F61B2B3D280065F8D9 /* BinaryDisposable.swift in Sources */, @@ -743,7 +748,6 @@ C83CEA331B2495D7006828AC /* TakeWhile.swift in Sources */, C897EC331B10D426009C2CB0 /* BehaviorSubject.swift in Sources */, C8FDC5FC1B2B884F0065F8D9 /* StableCompositeDisposable.swift in Sources */, - C897EC2E1B10D3F4009C2CB0 /* ConnectableObservableType.swift in Sources */, C88BB8391B07E5ED0064D411 /* Aggregate.swift in Sources */, C88BB83A1B07E5ED0064D411 /* AnonymousDisposable.swift in Sources */, C88BB83B1B07E5ED0064D411 /* Merge.swift in Sources */, @@ -788,6 +792,7 @@ C88BB8581B07E5ED0064D411 /* Lock.swift in Sources */, C88BB8591B07E5ED0064D411 /* Observable.swift in Sources */, C88BB85A1B07E5ED0064D411 /* Disposable.swift in Sources */, + C8D675711B76BC26005264ED /* ConnectableObservableType.swift in Sources */, C88BB85B1B07E5ED0064D411 /* AsObservable.swift in Sources */, C88BB85C1B07E5ED0064D411 /* Do.swift in Sources */, C88BB85D1B07E5ED0064D411 /* SingleAssignmentDisposable.swift in Sources */, @@ -839,6 +844,7 @@ C87CF6051B1B7EC300283912 /* MainScheduler.swift in Sources */, C8A56B501AD7435900B4673B /* Bag.swift in Sources */, C805FC431B6437F80072FB83 /* BooleanDisposable.swift in Sources */, + C8D6756A1B76AD46005264ED /* ObservableType.swift in Sources */, C8FDC5FE1B2B88670065F8D9 /* NAryDisposable.swift in Sources */, C8A56B571AD7435900B4673B /* DisposeBase.swift in Sources */, C8FDC5F51B2B3D280065F8D9 /* BinaryDisposable.swift in Sources */, @@ -857,7 +863,6 @@ C83CEA321B2495D7006828AC /* TakeWhile.swift in Sources */, C897EC321B10D426009C2CB0 /* BehaviorSubject.swift in Sources */, C8FDC5FB1B2B884F0065F8D9 /* StableCompositeDisposable.swift in Sources */, - C897EC2D1B10D3F4009C2CB0 /* ConnectableObservableType.swift in Sources */, C8A56B5E1AD7435900B4673B /* Aggregate.swift in Sources */, C8A56B531AD7435900B4673B /* AnonymousDisposable.swift in Sources */, C8A56B671AD7435900B4673B /* Merge.swift in Sources */, @@ -902,6 +907,7 @@ C8A56B4F1AD7435900B4673B /* Lock.swift in Sources */, C8A56B5C1AD7435900B4673B /* Observable.swift in Sources */, C8A56B521AD7435900B4673B /* Disposable.swift in Sources */, + C8D675701B76BC26005264ED /* ConnectableObservableType.swift in Sources */, C8A56B601AD7435900B4673B /* AsObservable.swift in Sources */, C8A56B661AD7435900B4673B /* Do.swift in Sources */, C8A56B591AD7435900B4673B /* SingleAssignmentDisposable.swift in Sources */, diff --git a/RxSwift/RxSwift/Subjects/ConnectableObservableType.swift b/RxSwift/RxSwift/ConnectableObservableType.swift similarity index 100% rename from RxSwift/RxSwift/Subjects/ConnectableObservableType.swift rename to RxSwift/RxSwift/ConnectableObservableType.swift diff --git a/RxSwift/RxSwift/Disposables/DisposeBag.swift b/RxSwift/RxSwift/Disposables/DisposeBag.swift index c27c2af67..8905ec50c 100644 --- a/RxSwift/RxSwift/Disposables/DisposeBag.swift +++ b/RxSwift/RxSwift/Disposables/DisposeBag.swift @@ -8,6 +8,12 @@ import Foundation +extension Disposable { + public func addDisposableTo(bag: DisposeBag) { + bag.addDisposable(self) + } +} + // Thread safe bag that disposes disposables that have been added to it on `deinit`. // This returns ARC (RAII) like resource management to `RxSwift`. public class DisposeBag: DisposeBase { diff --git a/RxSwift/RxSwift/Disposables/NopDisposable.swift b/RxSwift/RxSwift/Disposables/NopDisposable.swift index 6f379e170..c0bccdd42 100644 --- a/RxSwift/RxSwift/Disposables/NopDisposable.swift +++ b/RxSwift/RxSwift/Disposables/NopDisposable.swift @@ -8,9 +8,6 @@ import Foundation -@available(*, deprecated=1.5, message="NopDisposable") -typealias DefaultDisposable = NopDisposable - public let NopDisposableResult = success(NopDisposable.instance) // Disposable that does nothing diff --git a/RxSwift/RxSwift/Disposables/ScopedDispose.swift b/RxSwift/RxSwift/Disposables/ScopedDispose.swift index eec2ec6f8..e4689f1fc 100644 --- a/RxSwift/RxSwift/Disposables/ScopedDispose.swift +++ b/RxSwift/RxSwift/Disposables/ScopedDispose.swift @@ -8,6 +8,13 @@ import Foundation +extension Disposable { + public var scopedDispose: ScopedDispose { + return ScopedDispose(disposable: self) + } +} + + // It will dispose `disposable` on `deinit`. // This returns ARC (RAII) like resource management to `RxSwift`. public class ScopedDispose : DisposeBase { @@ -25,8 +32,4 @@ public class ScopedDispose : DisposeBase { deinit { self.dispose() } -} - -public func scopedDispose(disposable: Disposable) -> ScopedDispose { - return ScopedDispose(disposable: disposable) } \ No newline at end of file diff --git a/RxSwift/RxSwift/Observable+Extensions.swift b/RxSwift/RxSwift/Observable+Extensions.swift index e2ff3a008..5bd286336 100644 --- a/RxSwift/RxSwift/Observable+Extensions.swift +++ b/RxSwift/RxSwift/Observable+Extensions.swift @@ -8,39 +8,32 @@ import Foundation -public func subscribe - (on: (event: Event) -> Void) - -> (Observable -> Disposable) { - return { source in +extension ObservableType { + public func subscribe(on: (event: Event) -> Void) + -> Disposable { let observer = AnonymousObserver { e in on(event: e) } - return source.subscribeSafe(observer) + return self.subscribeSafe(observer) } -} -public func subscribe - (next: (E) -> Void, error: (ErrorType) -> Void, completed: () -> Void) - -> (Observable -> Disposable) { - return { source in + public func subscribe(next: ((E) -> Void)? = nil, error: ((ErrorType) -> Void)? = nil, completed: (() -> Void)? = nil) + -> Disposable { let observer = AnonymousObserver { e in switch e { case .Next(let value): - next(value) + next?(value) case .Error(let e): - error(e) + error?(e) case .Completed: - completed() + completed?() } } - return source.subscribeSafe(observer) + return self.subscribeSafe(observer) } -} -public func subscribeNext - (onNext: (E) -> Void) - -> (Observable) -> Disposable { - return { source in + public func subscribeNext(onNext: (E) -> Void) + -> Disposable { let observer = AnonymousObserver { e in switch e { case .Next(let value): @@ -49,14 +42,11 @@ public func subscribeNext break } } - return source.subscribeSafe(observer) + return self.subscribeSafe(observer) } -} -public func subscribeError - (onError: (ErrorType) -> Void) - -> (Observable -> Disposable) { - return { source in + public func subscribeError(onError: (ErrorType) -> Void) + -> Disposable { let observer = AnonymousObserver { e in switch e { case .Error(let error): @@ -65,14 +55,11 @@ public func subscribeError break } } - return source.subscribeSafe(observer) + return self.subscribeSafe(observer) } -} -public func subscribeCompleted - (onCompleted: () -> Void) - -> (Observable -> Disposable) { - return { source in + public func subscribeCompleted(onCompleted: () -> Void) + -> Disposable { let observer = AnonymousObserver { e in switch e { case .Completed: @@ -81,11 +68,11 @@ public func subscribeCompleted break } } - return source.subscribeSafe(observer) + return self.subscribeSafe(observer) } } -public extension Observable { +public extension ObservableType { /* Observables can really be anything, implemented by anyone and hooked into large `Observable` chains. @@ -101,7 +88,7 @@ public extension Observable { `Producers` are special kind of observables that need to make sure that message grammar is respected. */ - public func subscribeSafe(observer: O) -> Disposable { + public func subscribeSafe(observer: O) -> Disposable { if let source = self as? Producer { return source.subscribeRaw(observer, enableSafeguard: false) } diff --git a/RxSwift/RxSwift/Observable.swift b/RxSwift/RxSwift/Observable.swift index c721946d6..66936b39c 100644 --- a/RxSwift/RxSwift/Observable.swift +++ b/RxSwift/RxSwift/Observable.swift @@ -8,7 +8,9 @@ import Foundation -public class Observable { +public class Observable : ObservableType { + public typealias E = Element + public init() { #if TRACE_RESOURCES OSAtomicIncrement32(&resourceCount) @@ -16,14 +18,17 @@ public class Observable { } /// Subscribes `observer` to receive events from this observable - public func subscribe(observer: O) -> Disposable { + public func subscribe(observer: O) -> Disposable { return abstractMethod() } + public func normalize() -> Observable { + return self + } + deinit { #if TRACE_RESOURCES OSAtomicDecrement32(&resourceCount) #endif } } - diff --git a/RxSwift/RxSwift/ObservableType.swift b/RxSwift/RxSwift/ObservableType.swift new file mode 100644 index 000000000..ef75209da --- /dev/null +++ b/RxSwift/RxSwift/ObservableType.swift @@ -0,0 +1,18 @@ +// +// ObservableType.swift +// RxSwift +// +// Created by Krunoslav Zaher on 8/8/15. +// Copyright © 2015 Krunoslav Zaher. All rights reserved. +// + +import Foundation + +public protocol ObservableType { + typealias E + + /// Subscribes `observer` to receive events from this observable + func subscribe(observer: O) -> Disposable + + func normalize() -> Observable +} \ No newline at end of file diff --git a/RxSwift/RxSwift/Observables/Implementations/ConnectableObservable.swift b/RxSwift/RxSwift/Observables/Implementations/ConnectableObservable.swift index 5d3337433..e481d94d9 100644 --- a/RxSwift/RxSwift/Observables/Implementations/ConnectableObservable.swift +++ b/RxSwift/RxSwift/Observables/Implementations/ConnectableObservable.swift @@ -40,7 +40,7 @@ class ConnectableObservable : ConnectableObservableType< var connection: ConnectionType? init(source: Observable, subject: SubjectType) { - self.source = asObservable(source) + self.source = source.asObservable() self.subject = subject self.connection = nil } diff --git a/RxSwift/RxSwift/Observables/Implementations/Debug.swift b/RxSwift/RxSwift/Observables/Implementations/Debug.swift index 3bddebe43..750878d67 100644 --- a/RxSwift/RxSwift/Observables/Implementations/Debug.swift +++ b/RxSwift/RxSwift/Observables/Implementations/Debug.swift @@ -40,7 +40,7 @@ class Debug : Producer { let source: Observable - init(identifier: String, source: Observable) { + init(source: Observable, identifier: String) { self.identifier = identifier self.source = source } diff --git a/RxSwift/RxSwift/Observables/Implementations/Filter.swift b/RxSwift/RxSwift/Observables/Implementations/Filter.swift index 10be0fefc..108543a70 100644 --- a/RxSwift/RxSwift/Observables/Implementations/Filter.swift +++ b/RxSwift/RxSwift/Observables/Implementations/Filter.swift @@ -8,10 +8,10 @@ import Foundation -class Where_: Sink, ObserverType { +class FilterSink: Sink, ObserverType { typealias Element = O.Element - typealias Parent = Where + typealias Parent = Filter let parent: Parent @@ -41,7 +41,7 @@ class Where_: Sink, ObserverType { } } -class Where : Producer { +class Filter : Producer { typealias Predicate = (Element) -> RxResult let source: Observable @@ -53,7 +53,7 @@ class Where : Producer { } override func run(observer: O, cancel: Disposable, setSink: (Disposable) -> Void) -> Disposable { - let sink = Where_(parent: self, observer: observer, cancel: cancel) + let sink = FilterSink(parent: self, observer: observer, cancel: cancel) setSink(sink) return source.subscribeSafe(sink) } diff --git a/RxSwift/RxSwift/Observables/Implementations/Merge.swift b/RxSwift/RxSwift/Observables/Implementations/Merge.swift index 13727a474..a19642f2e 100644 --- a/RxSwift/RxSwift/Observables/Implementations/Merge.swift +++ b/RxSwift/RxSwift/Observables/Implementations/Merge.swift @@ -10,14 +10,15 @@ import Foundation // sequential -class Merge_Iter : ObserverType { +class MergeSinkIter : ObserverType { typealias Element = O.Element typealias DisposeKey = Bag.KeyType + typealias Parent = MergeSink - let parent: Merge_ + let parent: Parent let disposeKey: DisposeKey - init(parent: Merge_, disposeKey: DisposeKey) { + init(parent: Parent, disposeKey: DisposeKey) { self.parent = parent self.disposeKey = disposeKey } @@ -49,9 +50,9 @@ class Merge_Iter : ObserverType { } } -class Merge_ : Sink, ObserverType { - typealias Element = Observable - typealias Parent = Merge +class MergeSink : Sink, ObserverType { + typealias Element = S + typealias Parent = Merge typealias MergeState = ( stopped: Bool, @@ -96,7 +97,7 @@ class Merge_ : Sink, ObserverType { let maybeKey = mergeState.group.addDisposable(innerSubscription) if let key = maybeKey { - let observer = Merge_Iter(parent: self, disposeKey: key) + let observer = MergeSinkIter(parent: self, disposeKey: key) let disposable = value.subscribeSafe(observer) innerSubscription.disposable = disposable } @@ -127,10 +128,10 @@ class Merge_ : Sink, ObserverType { // concurrent -class Merge_ConcurrentIter : ObserverType { +class MergeConcurrentSinkIter : ObserverType { typealias Element = O.Element typealias DisposeKey = Bag.KeyType - typealias Parent = Merge_Concurrent + typealias Parent = MergeConcurrentSink let parent: Parent let disposeKey: DisposeKey @@ -173,10 +174,10 @@ class Merge_ConcurrentIter : ObserverType { } } -class Merge_Concurrent : Sink, ObserverType { - typealias Element = Observable - typealias Parent = Merge - typealias QueueType = Queue> +class MergeConcurrentSink : Sink, ObserverType { + typealias Element = S + typealias Parent = Merge + typealias QueueType = Queue typealias MergeState = ( stopped: Bool, @@ -222,7 +223,7 @@ class Merge_Concurrent : Sink, ObserverType { let key = group.addDisposable(subscription) if let key = key { - let observer = Merge_ConcurrentIter(parent: self, disposeKey: key) + let observer = MergeConcurrentSinkIter(parent: self, disposeKey: key) let disposable = innerSource.subscribeSafe(observer) subscription.disposable = disposable @@ -272,23 +273,23 @@ class Merge_Concurrent : Sink, ObserverType { } } -class Merge : Producer { - let sources: Observable> +class Merge : Producer { + let sources: Observable let maxConcurrent: Int - init(sources: Observable>, maxConcurrent: Int) { + init(sources: Observable, maxConcurrent: Int) { self.sources = sources self.maxConcurrent = maxConcurrent } - override func run(observer: O, cancel: Disposable, setSink: (Disposable) -> Void) -> Disposable { + override func run(observer: O, cancel: Disposable, setSink: (Disposable) -> Void) -> Disposable { if maxConcurrent > 0 { - let sink = Merge_Concurrent(parent: self, observer: observer, cancel: cancel) + let sink = MergeConcurrentSink(parent: self, observer: observer, cancel: cancel) setSink(sink) return sink.run() } else { - let sink = Merge_(parent: self, observer: observer, cancel: cancel) + let sink = MergeSink(parent: self, observer: observer, cancel: cancel) setSink(sink) return sink.run() } diff --git a/RxSwift/RxSwift/Observables/Implementations/Switch.swift b/RxSwift/RxSwift/Observables/Implementations/Switch.swift index 47f09f6f7..d69f2b931 100644 --- a/RxSwift/RxSwift/Observables/Implementations/Switch.swift +++ b/RxSwift/RxSwift/Observables/Implementations/Switch.swift @@ -8,9 +8,9 @@ import Foundation -class Switch_ : Sink, ObserverType { - typealias Element = Observable - typealias Parent = Switch +class SwitchSink : Sink, ObserverType { + typealias Element = S + typealias Parent = Switch typealias SwitchState = ( subscription: SingleAssignmentDisposable, @@ -49,14 +49,14 @@ class Switch_ : Sink, ObserverType { case .Next(let observable): let latest: Int = self.lock.calculateLocked { self.switchState.hasLatest = true - self.switchState.latest = self.switchState.latest + 1 + self.switchState.latest = self.switchState.latest &+ 1 return self.switchState.latest } let d = SingleAssignmentDisposable() self.switchState.innerSubscription.disposable = d - let observer = SwitchIter(parent: self, id: latest, _self: d) + let observer = SwitchSinkIter(parent: self, id: latest, _self: d) let disposable = observable.subscribeSafe(observer) d.disposable = disposable case .Error(let error): @@ -79,9 +79,9 @@ class Switch_ : Sink, ObserverType { } } -class SwitchIter : ObserverType { +class SwitchSinkIter : ObserverType { typealias Element = O.Element - typealias Parent = Switch_ + typealias Parent = SwitchSink let parent: Parent let id: Int @@ -126,15 +126,15 @@ class SwitchIter : ObserverType { } } -class Switch : Producer { - let sources: Observable> +class Switch : Producer { + let sources: Observable - init(sources: Observable>) { + init(sources: Observable) { self.sources = sources } - override func run(observer: O, cancel: Disposable, setSink: (Disposable) -> Void) -> Disposable { - let sink = Switch_(parent: self, observer: observer, cancel: cancel) + override func run(observer: O, cancel: Disposable, setSink: (Disposable) -> Void) -> Disposable { + let sink = SwitchSink(parent: self, observer: observer, cancel: cancel) setSink(sink) return sink.run() } diff --git a/RxSwift/RxSwift/Observables/Observable+Aggregate.swift b/RxSwift/RxSwift/Observables/Observable+Aggregate.swift index c9305adef..10a215110 100644 --- a/RxSwift/RxSwift/Observables/Observable+Aggregate.swift +++ b/RxSwift/RxSwift/Observables/Observable+Aggregate.swift @@ -10,68 +10,56 @@ import Foundation // aggregate -public func aggregateOrDie - (seed: A, _ accumulator: (A, E) -> RxResult, _ resultSelector: (A) -> RxResult) - -> (Observable -> Observable) { - return { source in - return Aggregate(source: source, seed: seed, accumulator: accumulator, resultSelector: resultSelector) +extension ObservableType { + public func aggregateOrDie + (seed: A, _ accumulator: (A, E) -> RxResult, _ resultSelector: (A) -> RxResult) + -> Observable { + return Aggregate(source: self.normalize(), seed: seed, accumulator: accumulator, resultSelector: resultSelector) } -} -public func aggregateOrDie - (seed: A, _ accumulator: (A, E) -> RxResult) - -> (Observable -> Observable) { - return { source in - return Aggregate(source: source, seed: seed, accumulator: accumulator, resultSelector: { success($0) }) + public func aggregateOrDie + (seed: A, _ accumulator: (A, E) -> RxResult) + -> Observable { + return Aggregate(source: self.normalize(), seed: seed, accumulator: accumulator, resultSelector: { success($0) }) } -} -public func aggregate - (seed: A, _ accumulator: (A, E) -> A, _ resultSelector: (A) -> R) - -> (Observable -> Observable) { - return { source in - return Aggregate(source: source, seed: seed, accumulator: { success(accumulator($0, $1)) }, resultSelector: { success(resultSelector($0)) }) + public func aggregate + (seed: A, _ accumulator: (A, E) -> A, _ resultSelector: (A) -> R) + -> Observable { + return Aggregate(source: self.normalize(), seed: seed, accumulator: { success(accumulator($0, $1)) }, resultSelector: { success(resultSelector($0)) }) } -} -public func aggregate - (seed: A, _ accumulator: (A, E) -> A) - -> (Observable -> Observable) { - return { source in - return Aggregate(source: source, seed: seed, accumulator: { success(accumulator($0, $1)) }, resultSelector: { success($0) }) + public func aggregate + (seed: A, _ accumulator: (A, E) -> A) + -> Observable { + return Aggregate(source: self.normalize(), seed: seed, accumulator: { success(accumulator($0, $1)) }, resultSelector: { success($0) }) } } // reduce -public func reduceOrDie - (seed: A, _ accumulator: (A, E) -> RxResult, _ resultSelector: (A) -> RxResult) - -> (Observable -> Observable) { - return { source in - return Aggregate(source: source, seed: seed, accumulator: accumulator, resultSelector: resultSelector) +extension ObservableType { + public func reduceOrDie + (seed: A, _ accumulator: (A, E) -> RxResult, _ resultSelector: (A) -> RxResult) + -> Observable { + return Aggregate(source: self.normalize(), seed: seed, accumulator: accumulator, resultSelector: resultSelector) } -} -public func reduceOrDie - (seed: A, _ accumulator: (A, E) -> RxResult) - -> (Observable -> Observable) { - return { source in - return Aggregate(source: source, seed: seed, accumulator: accumulator, resultSelector: { success($0) }) + public func reduceOrDie + (seed: A, _ accumulator: (A, E) -> RxResult) + -> Observable { + return Aggregate(source: self.normalize(), seed: seed, accumulator: accumulator, resultSelector: { success($0) }) } -} -public func reduce - (seed: A, _ accumulator: (A, E) -> A, _ resultSelector: (A) -> R) - -> (Observable -> Observable) { - return { source in - return Aggregate(source: source, seed: seed, accumulator: { success(accumulator($0, $1)) }, resultSelector: { success(resultSelector($0)) }) + public func reduce + (seed: A, _ accumulator: (A, E) -> A, _ resultSelector: (A) -> R) + -> Observable { + return Aggregate(source: self.normalize(), seed: seed, accumulator: { success(accumulator($0, $1)) }, resultSelector: { success(resultSelector($0)) }) } -} -public func reduce - (seed: A, _ accumulator: (A, E) -> A) - -> (Observable -> Observable) { - return { source in - return Aggregate(source: source, seed: seed, accumulator: { success(accumulator($0, $1)) }, resultSelector: { success($0) }) + public func reduce + (seed: A, _ accumulator: (A, E) -> A) + -> Observable { + return Aggregate(source: self.normalize(), seed: seed, accumulator: { success(accumulator($0, $1)) }, resultSelector: { success($0) }) } -} \ No newline at end of file +} diff --git a/RxSwift/RxSwift/Observables/Observable+Binding.swift b/RxSwift/RxSwift/Observables/Observable+Binding.swift index 12db8dc9c..a65f8533b 100644 --- a/RxSwift/RxSwift/Observables/Observable+Binding.swift +++ b/RxSwift/RxSwift/Observables/Observable+Binding.swift @@ -10,87 +10,86 @@ import Foundation // multicast -public func multicast - (subject: SubjectType) - -> (Observable -> ConnectableObservableType) { - return { source in - return ConnectableObservable(source: source, subject: subject) +extension ObservableType { + public func multicast(subject: SubjectType) + -> ConnectableObservableType { + return ConnectableObservable(source: self.normalize(), subject: subject) } -} -public func multicastOrDie - ( - subjectSelector: () -> RxResult>, - selector: (Observable) -> RxResult> - ) - -> (Observable -> Observable) { - - return { source in + public func multicastOrDie( + subjectSelector: () -> RxResult>, + selector: (Observable) -> RxResult> + ) + -> Observable { return Multicast( - source: source, + source: self.normalize(), subjectSelector: subjectSelector, selector: selector ) } -} -public func multicast - ( - subjectSelector: () -> SubjectType, - selector: (Observable) -> Observable - ) - -> (Observable -> Observable) { - - return { source in - return Multicast( - source: source, - subjectSelector: { success(subjectSelector()) }, - selector: { success(selector($0)) } - ) - } + public func multicast + ( + subjectSelector: () -> SubjectType, + selector: (Observable) -> Observable + ) + -> Observable { + + return Multicast( + source: self.normalize(), + subjectSelector: { success(subjectSelector()) }, + selector: { success(selector($0)) } + ) + } } // publish -public func publish(source: Observable) - -> ConnectableObservableType { - return source >- multicast(PublishSubject()) +extension ObservableType { + public var publish: ConnectableObservableType { + return self.multicast(PublishSubject()) + } } -// replay +// replay -public func replay - (bufferSize: Int) - -> (Observable -> ConnectableObservableType) { - return { source in - return multicast(ReplaySubject(bufferSize: bufferSize))(source) +extension ObservableType { + public func replay(bufferSize: Int) + -> ConnectableObservableType { + return self.multicast(ReplaySubject(bufferSize: bufferSize)) } } // refcount -public func refCount - (source: ConnectableObservableType) - -> Observable { - return RefCount(source: source) +extension ConnectableObservableType { + public var refCount: Observable { + return RefCount(source: self) + } } -// sharedWithCachedLastResult +// share + +extension ObservableType { + public var share: Observable { + return self.publish.refCount + } +} -// In Rx every subscription uses it's own set of resources. -// In case of UI, asynchronous operations are usually used to fetch data from server. -// In case data is fetched from server, stale data can be served first, and then updated with -// fresh data from server. +// shareReplay -public func sharedWithCachedLastResult(source: Observable) - -> Observable { - return source >- replay(1) >- refCount +extension ObservableType { + public func shareReplay(bufferSize: Int) + -> Observable { + return self.replay(bufferSize).refCount + } } // variable -// variable is synonym for `sharedWithCachedLastResult` -public func variable(source: Observable) - -> Observable { - return source >- replay(1) >- refCount +extension ObservableType { + // variable is alias for `shareReplay(1)` + public var variable: Observable { + return self.replay(1).refCount + } } diff --git a/RxSwift/RxSwift/Observables/Observable+Concurrency.swift b/RxSwift/RxSwift/Observables/Observable+Concurrency.swift index c4a9d8529..bd7909edb 100644 --- a/RxSwift/RxSwift/Observables/Observable+Concurrency.swift +++ b/RxSwift/RxSwift/Observables/Observable+Concurrency.swift @@ -8,38 +8,42 @@ import Foundation -// `observeSingleOn` assumes that observed sequence will have one element -// and in cases it has more than one element it will throw an exception. -// -// Most common use case for `observeSingleOn` would be to execute some work on background thread -// and return result to main thread. -// -// This is a performance gain considering general case. -public func observeSingleOn - (scheduler: ImmediateScheduler) - -> Observable -> Observable { - return { source in - return ObserveSingleOn(source: source, scheduler: scheduler) +// observeOnSingle + +extension ObservableType { + // `observeSingleOn` assumes that observed sequence will have one element + // and in cases it has more than one element it will throw an exception. + // + // Most common use case for `observeSingleOn` would be to execute some work on background thread + // and return result to main thread. + // + // This is a performance gain considering general case. + public func observeSingleOn(scheduler: ImmediateScheduler) + -> Observable { + return ObserveSingleOn(source: self.normalize(), scheduler: scheduler) } } -public func observeOn - (scheduler: ImmediateScheduler) - -> Observable -> Observable { - return { source in +// observeOn + +extension ObservableType { + + public func observeOn(scheduler: ImmediateScheduler) + -> Observable { if let scheduler = scheduler as? SerialDispatchQueueScheduler { - return ObserveOnSerialDispatchQueue(source: source, scheduler: scheduler) + return ObserveOnSerialDispatchQueue(source: self.normalize(), scheduler: scheduler) } else { - return ObserveOn(source: source, scheduler: scheduler) + return ObserveOn(source: self.normalize(), scheduler: scheduler) } } } -public func subscribeOn - (scheduler: ImmediateScheduler) - -> Observable -> Observable { - return { source in - return SubscribeOn(source: source, scheduler: scheduler) +// subscribeOn + +extension ObservableType { + public func subscribeOn(scheduler: ImmediateScheduler) + -> Observable { + return SubscribeOn(source: self.normalize(), scheduler: scheduler) } } \ No newline at end of file diff --git a/RxSwift/RxSwift/Observables/Observable+Creation.swift b/RxSwift/RxSwift/Observables/Observable+Creation.swift index 6163cbc12..720ff80b5 100644 --- a/RxSwift/RxSwift/Observables/Observable+Creation.swift +++ b/RxSwift/RxSwift/Observables/Observable+Creation.swift @@ -33,7 +33,7 @@ public func never() -> Observable { // return -public func returnElement(value: E) -> Observable { +public func just(value: E) -> Observable { return AnonymousObservable { observer in sendNext(observer, value) sendCompleted(observer) @@ -41,11 +41,7 @@ public func returnElement(value: E) -> Observable { } } -public func just(value: E) -> Observable { - return returnElement(value) -} - -public func returnElements(values: E ...) -> Observable { +public func sequence(values: E ...) -> Observable { return AnonymousObservable { observer in for element in values { sendNext(observer, element) diff --git a/RxSwift/RxSwift/Observables/Observable+Debug.swift b/RxSwift/RxSwift/Observables/Observable+Debug.swift index f58b065c2..a404dc946 100644 --- a/RxSwift/RxSwift/Observables/Observable+Debug.swift +++ b/RxSwift/RxSwift/Observables/Observable+Debug.swift @@ -10,9 +10,9 @@ import Foundation // debug -public func debug(identifier: String) - -> (Observable -> Observable) { - return { source in - return Debug(identifier: identifier, source: source) +extension ObservableType { + public func debug(identifier: String) + -> Observable { + return Debug(source: self.normalize(), identifier: identifier) } } \ No newline at end of file diff --git a/RxSwift/RxSwift/Observables/Observable+Multiple.swift b/RxSwift/RxSwift/Observables/Observable+Multiple.swift index cd5076523..a69d143bb 100644 --- a/RxSwift/RxSwift/Observables/Observable+Multiple.swift +++ b/RxSwift/RxSwift/Observables/Observable+Multiple.swift @@ -10,110 +10,92 @@ import Foundation // switch -public func switchLatest - (sources: Observable>) - -> Observable { - - // swift doesn't have co/contravariance - return Switch(sources: sources) +extension ObservableType where E : ObservableType { + public var switchLatest: Observable { + // swift doesn't have co/contravariance + return Switch(sources: self.normalize()) + } } - // concat -public func concat - (sources: [Observable]) - -> Observable { - return Concat(sources: sources) +public func concat(sources: [O]) + -> Observable { + return Concat(sources: LazySequence(sources).map { $0.normalize() }) } -public func concat - (sources: Observable>) - -> Observable { - return merge(maxConcurrent: 1)(sources) +extension ObservableType where E : ObservableType { + public var concat: Observable { + return self.merge(maxConcurrent: 1) + } } // merge -public func merge - (sources: Observable>) - -> Observable { - return Merge(sources: sources, maxConcurrent: 0) -} +extension ObservableType where E : ObservableType { + public var merge: Observable { + return Merge(sources: self.normalize(), maxConcurrent: 0) + } -public func merge - (maxConcurrent maxConcurrent: Int) - -> (Observable> -> Observable) { - return { sources in - return Merge(sources: sources, maxConcurrent: maxConcurrent) + public func merge(maxConcurrent maxConcurrent: Int) + -> Observable { + return Merge(sources: self.normalize(), maxConcurrent: maxConcurrent) } } // catch -public func catchOrDie - (handler: (ErrorType) -> RxResult>) - -> (Observable -> Observable) { - return { source in - return Catch(source: source, handler: handler) +extension ObservableType { + public func catchErrorOrDie(handler: (ErrorType) -> RxResult>) + -> Observable { + return Catch(source: self.normalize(), handler: handler) + } + + public func catchError(handler: (ErrorType) -> Observable) + -> Observable { + return Catch(source: self.normalize(), handler: { success(handler($0)) }) } -} -public func onError - (handler: (ErrorType) -> Observable) - -> (Observable -> Observable) { - return { source in - return Catch(source: source, handler: { success(handler($0)) }) + // In case of error, terminates sequence with `replaceErrorWith`. + public func catchError(replaceErrorWith: E) + -> Observable { + return Catch(source: self.normalize(), handler: { _ in success(just(replaceErrorWith)) }) + } + + // When error happens `error` will be forwarded as a next `Result` value + // and sequence will be completed. + public var catchErrorToResult: Observable > { + return CatchToResult(source: self.normalize()) } } -public func onError - (sources: AnySequence>) +public func catchError(sources: AnySequence>) -> Observable { // just wrapping it in sequence of for now - return CatchSequence(sources: AnySequence(sources)) -} - -// In case of error, terminates sequence with `replaceErrorWith`. -public func onError - (replaceErrorWith: E) - -> (Observable -> Observable) { - return { source in - return Catch(source: source, handler: { _ in success(returnElement(replaceErrorWith)) }) - } -} - -// When error happens `error` will be forwarded as a next `Result` value -// and sequence will be completed. -public func catchToResult - (source: Observable) - -> Observable > { - return CatchToResult(source: source) + return CatchSequence(sources: sources) } // takeUntil -public func takeUntil - (other: Observable) - -> Observable -> Observable { - return { source in - return TakeUntil(source: source, other: other) +extension ObservableType { + public func takeUntil(other: O) + -> Observable { + return TakeUntil(source: self.normalize(), other: other.normalize()) } } -// amb +// amb -public func amb - (left: Observable, _ right: Observable) - -> Observable { - return Amb(left: left, right: right) +public func amb + (left: O, _ right: O) + -> Observable { + return Amb(left: left.normalize(), right: right.normalize()) } -public func amb - (observables: AnySequence>) - -> Observable { +public func amb + (observables: AnySequence) + -> Observable { return observables.reduce(never()) { a, o in - return amb(a, o) + return amb(a, o.normalize()) } - } diff --git a/RxSwift/RxSwift/Observables/Observable+Single.swift b/RxSwift/RxSwift/Observables/Observable+Single.swift index 61b927a75..1e4100396 100644 --- a/RxSwift/RxSwift/Observables/Observable+Single.swift +++ b/RxSwift/RxSwift/Observables/Observable+Single.swift @@ -10,102 +10,83 @@ import Foundation // as observable -public func asObservable - (source: Observable) -> Observable { - if let asObservable = source as? AsObservable { - return asObservable.omega() - } - else { - return AsObservable(source: source) +extension ObservableType { + public func asObservable() -> Observable { + if let asObservable = self as? AsObservable { + return asObservable.omega() + } + else { + return AsObservable(source: self.normalize()) + } } } // distinct until changed -public func distinctUntilChangedOrDie(source: Observable) - -> Observable { - return distinctUntilChangedOrDie({ success($0) }, { success($0 == $1) })(source) -} +extension ObservableType where E: Equatable { + public func distinctUntilChangedOrDie() + -> Observable { + return self.distinctUntilChangedOrDie({ success($0) }, { success($0 == $1) }) + } -public func distinctUntilChangedOrDie - (keySelector: (E) -> RxResult) - -> (Observable -> Observable) { - return { source in - return distinctUntilChangedOrDie(keySelector, { success($0 == $1) })(source) + public func distinctUntilChanged() + -> Observable { + return self.distinctUntilChanged({ $0 }, { ($0 == $1) }) } } -public func distinctUntilChangedOrDie - (comparer: (lhs: E, rhs: E) -> RxResult) - -> (Observable -> Observable) { - return { source in - return distinctUntilChangedOrDie({ success($0) }, comparer)(source) +extension ObservableType { + public func distinctUntilChangedOrDie(keySelector: (E) -> RxResult) + -> Observable { + return self.distinctUntilChangedOrDie(keySelector, { success($0 == $1) }) } -} -public func distinctUntilChangedOrDie - (keySelector: (E) -> RxResult, _ comparer: (lhs: K, rhs: K) -> RxResult) - -> (Observable -> Observable) { - return { source in - return DistinctUntilChanged(source: source, selector: keySelector, comparer: comparer) + public func distinctUntilChangedOrDie(comparer: (lhs: E, rhs: E) -> RxResult) + -> Observable { + return self.distinctUntilChangedOrDie({ success($0) }, comparer) } -} -public func distinctUntilChanged(source: Observable) - -> Observable { - return distinctUntilChanged({ $0 }, { ($0 == $1) })(source) - -} + public func distinctUntilChangedOrDie(keySelector: (E) -> RxResult, _ comparer: (lhs: K, rhs: K) -> RxResult) + -> Observable { + return DistinctUntilChanged(source: self.normalize(), selector: keySelector, comparer: comparer) + } -public func distinctUntilChanged - (keySelector: (E) -> K) - -> (Observable -> Observable) { - return { source in - return distinctUntilChanged(keySelector, { ($0 == $1) })(source) + public func distinctUntilChanged(keySelector: (E) -> K) + -> Observable { + return distinctUntilChanged(keySelector, { ($0 == $1) }) } -} -public func distinctUntilChanged - (comparer: (lhs: E, rhs: E) -> Bool) - -> (Observable -> Observable) { - return { source in - return distinctUntilChanged({ ($0) }, comparer)(source) + public func distinctUntilChanged(comparer: (lhs: E, rhs: E) -> Bool) + -> Observable { + return distinctUntilChanged({ ($0) }, comparer) } -} -public func distinctUntilChanged - (keySelector: (E) -> K, _ comparer: (lhs: K, rhs: K) -> Bool) - -> (Observable -> Observable) { - return { source in - return DistinctUntilChanged(source: source, selector: {success(keySelector($0)) }, comparer: { success(comparer(lhs: $0, rhs: $1))}) + public func distinctUntilChanged(keySelector: (E) -> K, _ comparer: (lhs: K, rhs: K) -> Bool) + -> Observable { + return DistinctUntilChanged(source: self.normalize(), selector: {success(keySelector($0)) }, comparer: { success(comparer(lhs: $0, rhs: $1))}) } } // do -public func doOrDie - (eventHandler: (Event) -> RxResult) - -> (Observable -> Observable) { - return { source in - return Do(source: source, eventHandler: eventHandler) +extension ObservableType { + public func doOrDie(eventHandler: (Event) -> RxResult) + -> Observable { + return Do(source: self.normalize(), eventHandler: eventHandler) } -} -public func `do` - (eventHandler: (Event) -> Void) - -> (Observable -> Observable) { - return { source in - return Do(source: source, eventHandler: { success(eventHandler($0)) }) + public func `do`(eventHandler: (Event) -> Void) + -> Observable { + return Do(source: self.normalize(), eventHandler: { success(eventHandler($0)) }) } } // doOnNext -public func doOnNext - (actionOnNext: E -> Void) - -> (Observable -> Observable) { - return { source in - return source >- `do` { event in +extension ObservableType { + public func doOnNext(actionOnNext: E -> Void) + -> Observable { + return self.`do` { event in switch event { case .Next(let value): actionOnNext(value) @@ -118,47 +99,39 @@ public func doOnNext // startWith -// Prefixes observable sequence with `firstElement` element. -// The same functionality could be achieved using `concat([returnElement(prefix), source])`, -// but this is significantly more efficient implementation. -public func startWith - (firstElement: E) - -> (Observable -> Observable) { - return { source in - return StartWith(source: source, element: firstElement) +extension ObservableType { + // Prefixes observable sequence with `firstElement` element. + // The same functionality could be achieved using `concat([just(prefix), source])`, + // but this is significantly more efficient implementation. + public func startWith(firstElement: E) + -> Observable { + return StartWith(source: self.normalize(), element: firstElement) } } // retry -public func retry - (source: Observable) - -> Observable { - return AnySequence(InifiniteSequence(repeatedValue: source)) >- onError -} +extension ObservableType { + public var retry: Observable { + return CatchSequence(sources: AnySequence(InifiniteSequence(repeatedValue: self.normalize()))) + } -public func retry - (retryCount: Int) - -> Observable -> Observable { - return { source in - return AnySequence(Repeat(count: retryCount, repeatedValue: source)) >- onError + public func retry(retryCount: Int) + -> Observable { + return CatchSequence(sources: AnySequence(Repeat(count: retryCount, repeatedValue: self.normalize()))) } } // scan -public func scan - (seed: A, accumulator: (A, E) -> A) - -> Observable -> Observable { - return { source in - return Scan(source: source, seed: seed, accumulator: { success(accumulator($0, $1)) }) +extension ObservableType { + public func scan(seed: A, accumulator: (A, E) -> A) + -> Observable { + return Scan(source: self.normalize(), seed: seed, accumulator: { success(accumulator($0, $1)) }) } -} -public func scanOrDie - (seed: A, accumulator: (A, E) -> RxResult) - -> Observable -> Observable { - return { source in - return Scan(source: source, seed: seed, accumulator: accumulator) + public func scanOrDie(seed: A, accumulator: (A, E) -> RxResult) + -> Observable { + return Scan(source: self.normalize(), seed: seed, accumulator: accumulator) } } \ No newline at end of file diff --git a/RxSwift/RxSwift/Observables/Observable+StandardSequenceOperators.swift b/RxSwift/RxSwift/Observables/Observable+StandardSequenceOperators.swift index ce0eba3e3..ba629caab 100644 --- a/RxSwift/RxSwift/Observables/Observable+StandardSequenceOperators.swift +++ b/RxSwift/RxSwift/Observables/Observable+StandardSequenceOperators.swift @@ -10,179 +10,99 @@ import Foundation // filter aka where -public func filterOrDie - (predicate: (E) -> RxResult) - -> (Observable -> Observable) { - return { source in - return whereOrDie(predicate)(source) +extension ObservableType { + public func filterOrDie(predicate: (E) -> RxResult) + -> Observable { + return Filter(source: self.normalize(), predicate: predicate) } -} - -public func filter - (predicate: (E) -> Bool) - -> (Observable -> Observable) { - return { source in - return `where`(predicate)(source) - } -} -public func whereOrDie - (predicate: (E) -> RxResult) - -> (Observable -> Observable) { - return { source in - return Where(source: source, predicate: predicate) - } -} - -public func `where` - (predicate: (E) -> Bool) - -> (Observable -> Observable) { - return { source in - return Where(source: source, predicate: { success(predicate($0)) }) + public func filter(predicate: (E) -> Bool) + -> Observable { + return Filter(source: self.normalize(), predicate: { success(predicate($0)) }) } } // takeWhile -public func takeWhile - (predicate: (E) -> Bool) - -> (Observable -> Observable) { - return { source in - return TakeWhile(source: source, predicate: predicate) +extension ObservableType { + public func takeWhile(predicate: (E) -> Bool) + -> Observable { + return TakeWhile(source: self.normalize(), predicate: predicate) } -} -public func takeWhile - (predicate: (E, Int) -> Bool) - -> (Observable -> Observable) { - return { source in - return TakeWhile(source: source, predicate: predicate) + public func takeWhile(predicate: (E, Int) -> Bool) + -> Observable { + return TakeWhile(source: self.normalize(), predicate: predicate) } } // take -public func take - (count: Int) - -> Observable -> Observable { - return { source in +extension ObservableType { + public func take(count: Int) + -> Observable { if count == 0 { return empty() } else { - return TakeCount(source: source, count: count) + return TakeCount(source: self.normalize(), count: count) } } } - + // skip -public func skip - (count: Int) - -> Observable -> Observable { - return { source in - return SkipCount(source: source, count: count) +extension ObservableType { + public func skip(count: Int) + -> Observable { + return SkipCount(source: self.normalize(), count: count) } } // map aka select -public func mapOrDie - (selector: E -> RxResult) - -> (Observable -> Observable) { - return { source in - return selectOrDie(selector)(source) +extension ObservableType { + public func mapOrDie(selector: E -> RxResult) + -> Observable { + return Map(source: self.normalize(), selector: selector) } -} -public func map - (selector: E -> R) - -> (Observable -> Observable) { - return { source in - return select(selector)(source) + public func map(selector: E -> R) + -> Observable { + return Map(source: self.normalize(), selector: { success(selector($0)) }) } -} -public func mapWithIndexOrDie - (selector: (E, Int) -> RxResult) - -> (Observable -> Observable) { - return { source in - return selectWithIndexOrDie(selector)(source) + public func mapWithIndexOrDie(selector: (E, Int) -> RxResult) + -> Observable { + return Map(source: self.normalize(), selector: selector) } -} -public func mapWithIndex - (selector: (E, Int) -> R) - -> (Observable -> Observable) { - return { source in - return selectWithIndex(selector)(source) + public func mapWithIndex(selector: (E, Int) -> R) + -> Observable { + return Map(source: self.normalize(), selector: { success(selector($0, $1)) }) } } - -// select - -public func selectOrDie - (selector: (E) -> RxResult) - -> (Observable -> Observable) { - return { source in - return Map(source: source, selector: selector) - } -} - -public func select - (selector: (E) -> R) - -> (Observable -> Observable) { - return { source in - return Map(source: source, selector: {success(selector($0)) }) - } -} - -public func selectWithIndexOrDie - (selector: (E, Int) -> RxResult) - -> (Observable -> Observable) { - return { source in - return Map(source: source, selector: selector) - } -} - -public func selectWithIndex - (selector: (E, Int) -> R) - -> (Observable -> Observable) { - return { source in - return Map(source: source, selector: {success(selector($0, $1)) }) - } -} - + // flatMap -public func flatMap - (selector: (E) -> Observable) - -> Observable -> Observable { - return { source in - return FlatMap(source: source, selector: { success(selector($0)) }) +extension ObservableType { + public func flatMap(selector: (E) -> Observable) + -> Observable { + return FlatMap(source: self.normalize(), selector: { success(selector($0)) }) } -} -public func flatMapOrDie - (selector: (E) -> RxResult>) - -> Observable -> Observable { - return { source in - return FlatMap(source: source, selector: selector) + public func flatMapOrDie(selector: (E) -> RxResult>) + -> Observable { + return FlatMap(source: self.normalize(), selector: selector) } -} -public func flatMapWithIndex - (selector: (E, Int) -> Observable) - -> Observable -> Observable { - return { source in - return FlatMap(source: source, selector: { success(selector($0, $1)) }) + public func flatMapWithIndex(selector: (E, Int) -> Observable) + -> Observable { + return FlatMap(source: self.normalize(), selector: { success(selector($0, $1)) }) } -} -public func flatMapWithIndexOrDie - (selector: (E, Int) -> RxResult>) - -> Observable -> Observable { - return { source in - return FlatMap(source: source, selector: selector) + public func flatMapWithIndexOrDie(selector: (E, Int) -> RxResult>) + -> Observable { + return FlatMap(source: self.normalize(), selector: selector) } } \ No newline at end of file diff --git a/RxSwift/RxSwift/Observables/Observable+Time.swift b/RxSwift/RxSwift/Observables/Observable+Time.swift index 3e7afa9ab..bb659d083 100644 --- a/RxSwift/RxSwift/Observables/Observable+Time.swift +++ b/RxSwift/RxSwift/Observables/Observable+Time.swift @@ -9,70 +9,61 @@ import Foundation // throttle - -public func throttle - (dueTime: S.TimeInterval, _ scheduler: S) - -> (Observable -> Observable) { - return { source in - return Throttle(source: source, dueTime: dueTime, scheduler: scheduler) +extension ObservableType { + public func throttle(dueTime: S.TimeInterval, _ scheduler: S) + -> Observable { + return Throttle(source: self.normalize(), dueTime: dueTime, scheduler: scheduler) } -} -public func debounce - (dueTime: S.TimeInterval, scheduler: S) - -> (Observable -> Observable) { - return { source in - return Throttle(source: source, dueTime: dueTime, scheduler: scheduler) + public func debounce(dueTime: S.TimeInterval, scheduler: S) + -> Observable { + return Throttle(source: self.normalize(), dueTime: dueTime, scheduler: scheduler) } } // sample -// If there isn't a new value in `source` sequence from the last sample time -// nothing will be forwarded. -public func sample - (sampler: Observable) - -> (Observable -> Observable) { - return { source in - return Sample(source: source, sampler: sampler, onlyNew: true) +extension ObservableType { + // If there isn't a new value in `source` sequence from the last sample time + // nothing will be forwarded. + public func sample(sampler: Observable) + -> Observable { + return Sample(source: self.normalize(), sampler: sampler, onlyNew: true) } -} -// On each sample latest element will always be forwarded. -public func sampleLatest - (sampler: Observable) - -> (Observable -> Observable) { - return { source in - return Sample(source: source, sampler: sampler, onlyNew: false) + // On each sample latest element will always be forwarded. + public func sampleLatest(sampler: Observable) + -> Observable { + return Sample(source: self.normalize(), sampler: sampler, onlyNew: false) } } // interval + + // fallback { -public func interval - (period: S.TimeInterval, _ scheduler: S) +public func interval(period: S.TimeInterval, _ scheduler: S) -> Observable { - return Timer(dueTime: period, - period: period, - scheduler: scheduler, - schedulePeriodic: abstractSchedulePeriodic(scheduler) - ) + return Timer(dueTime: period, + period: period, + scheduler: scheduler, + schedulePeriodic: abstractSchedulePeriodic(scheduler) + ) } // } // periodic schedulers { -public func interval - (period: S.TimeInterval, _ scheduler: S) +public func interval(period: S.TimeInterval, _ scheduler: S) -> Observable { - return Timer(dueTime: period, - period: period, - scheduler: scheduler, - schedulePeriodic: abstractSchedulePeriodic(scheduler) - ) + return Timer(dueTime: period, + period: period, + scheduler: scheduler, + schedulePeriodic: abstractSchedulePeriodic(scheduler) + ) } // } @@ -81,83 +72,76 @@ public func interval // fallback { -public func timer - (dueTime: S.TimeInterval, _ period: S.TimeInterval, scheduler: S) +public func timer(dueTime: S.TimeInterval, _ period: S.TimeInterval, scheduler: S) -> Observable { - return Timer( - dueTime: dueTime, - period: period, - scheduler: scheduler, - schedulePeriodic: abstractSchedulePeriodic(scheduler) - ) + return Timer( + dueTime: dueTime, + period: period, + scheduler: scheduler, + schedulePeriodic: abstractSchedulePeriodic(scheduler) + ) } -public func timer - (dueTime: S.TimeInterval, scheduler: S) +public func timer(dueTime: S.TimeInterval, scheduler: S) -> Observable { - return Timer( - dueTime: dueTime, - period: nil, - scheduler: scheduler, - schedulePeriodic: abstractSchedulePeriodic(scheduler) - ) + return Timer( + dueTime: dueTime, + period: nil, + scheduler: scheduler, + schedulePeriodic: abstractSchedulePeriodic(scheduler) + ) } // } // periodic schedulers { -public func timer - (dueTime: S.TimeInterval, _ period: S.TimeInterval, scheduler: S) +public func timer(dueTime: S.TimeInterval, _ period: S.TimeInterval, scheduler: S) -> Observable { - return Timer( - dueTime: dueTime, - period: period, - scheduler: scheduler, - schedulePeriodic: abstractSchedulePeriodic(scheduler) - ) + return Timer( + dueTime: dueTime, + period: period, + scheduler: scheduler, + schedulePeriodic: abstractSchedulePeriodic(scheduler) + ) } -public func timer - (dueTime: S.TimeInterval, scheduler: S) +public func timer(dueTime: S.TimeInterval, scheduler: S) -> Observable { - return Timer( - dueTime: dueTime, - period: nil, - scheduler: scheduler, - schedulePeriodic: abstractSchedulePeriodic(scheduler) - ) + return Timer( + dueTime: dueTime, + period: nil, + scheduler: scheduler, + schedulePeriodic: abstractSchedulePeriodic(scheduler) + ) } // } // take -public func take - (duration: S.TimeInterval, _ scheduler: S) - -> Observable -> Observable { - return { source in - return TakeTime(source: source, duration: duration, scheduler: scheduler) +extension ObservableType { + public func take(duration: S.TimeInterval, _ scheduler: S) + -> Observable { + return TakeTime(source: self.normalize(), duration: duration, scheduler: scheduler) } } // skip -public func skip - (duration: S.TimeInterval, _ scheduler: S) - -> Observable -> Observable { - return { source in - return SkipTime(source: source, duration: duration, scheduler: scheduler) +extension ObservableType { + public func skip(duration: S.TimeInterval, _ scheduler: S) + -> Observable { + return SkipTime(source: self.normalize(), duration: duration, scheduler: scheduler) } } // delaySubscription -public func delaySubscription - (dueTime: S.TimeInterval, _ scheduler: S) - -> Observable -> Observable { - return { source in - return DelaySubscription(source: source, dueTime: dueTime, scheduler: scheduler) +extension ObservableType { + public func delaySubscription(dueTime: S.TimeInterval, _ scheduler: S) + -> Observable { + return DelaySubscription(source: self.normalize(), dueTime: dueTime, scheduler: scheduler) } } \ No newline at end of file diff --git a/RxSwift/RxSwift/Rx.swift b/RxSwift/RxSwift/Rx.swift index a7eec43c2..123b2e9e3 100644 --- a/RxSwift/RxSwift/Rx.swift +++ b/RxSwift/RxSwift/Rx.swift @@ -20,19 +20,6 @@ public var resourceCount: Int32 = 0 public var numberOfSerialDispatchQueueObservables: Int32 = 0 #endif -// This is the pipe operator (left associative function application operator) -// a >- b >- c == c(b(a)) -// The reason this one is chosen for now is because -// * It's subtle, doesn't add a lot of visual noise -// * It's short -// * It kind of looks like ASCII art horizontal sink to the right -// -infix operator >- { associativity left precedence 91 } - -public func >- (lhs: In, @noescape rhs: In -> Out) -> Out { - return rhs(lhs) -} - func contract(@autoclosure condition: () -> Bool) { if !condition() { let exception = NSException(name: "ContractError", reason: "Contract failed", userInfo: nil) diff --git a/RxSwift/RxSwift/RxResult.swift b/RxSwift/RxSwift/RxResult.swift index 7659334a5..a4c020ee1 100644 --- a/RxSwift/RxSwift/RxResult.swift +++ b/RxSwift/RxSwift/RxResult.swift @@ -187,90 +187,3 @@ func lift(function: (T1, T2, T3) -> TRet) -> (RxResult, Rx } } -// depricated - -@available(*, deprecated=1.4, message="Replaced by success") -public func `return`(value: T) -> RxResult { - return .Success(value) -} - -infix operator >== { associativity left precedence 95 } - -@available(*, deprecated=1.4, message="Replaced by flatMap") -public func >== (lhs: RxResult, @noescape rhs: (In) -> RxResult) -> RxResult { - switch lhs { - case .Success(let result): return rhs(result) - case .Failure(let error): return .Failure(error) - } -} - -@available(*, deprecated=1.4, message="Replaced by map") -public func >== (lhs: RxResult, @noescape rhs: (In) -> Out) -> RxResult { - switch lhs { - case .Success(let result): return success(rhs(result)) - case .Failure(let error): return .Failure(error) - } -} - -infix operator >>> { associativity left precedence 95 } - -@available(*, deprecated=1.4, message="Replaced by map") -public func >>> (lhs: RxResult, @noescape rhs: () -> Out) -> RxResult { - switch lhs { - case .Success: return success(rhs()) - case .Failure(let error): return .Failure(error) - } -} - -@available(*, deprecated=1.4, message="Replaced by flatMap") -public func >>> (lhs: RxResult, @noescape rhs: () -> RxResult) -> RxResult { - switch lhs { - case .Success: return rhs() - case .Failure(let error): return .Failure(error) - } -} - -infix operator >>! { associativity left precedence 95 } - -@available(*, deprecated=1.4, message="Replaced by recoverWith") -public func >>! (lhs: RxResult, @noescape rhs: (ErrorType) -> RxResult) -> RxResult { - switch lhs { - case .Failure(let error): - return rhs(error) - default: - return lhs - } -} - -prefix operator * { } - -@available(*, deprecated=1.4, message="Replaced by get") -public prefix func *(result: RxResult) -> T { - switch result { - case .Success(let value): return value - default: - let result: T? = nil - return result! - } -} - -@available(*, deprecated=1.4, message="Replaced by recover") -public func replaceErrorWith(result: RxResult, errorValue: T) -> T { - switch result { - case .Success(let value): - return value - case .Failure: - return errorValue - } -} - -@available(*, deprecated=1.4, message="Replaced by recoverWith") -public func replaceErrorWithNil(result: RxResult) -> T? { - switch result { - case .Success(let value): - return value - case .Failure: - return nil - } -} - diff --git a/RxSwift/RxSwift/Schedulers/SerialDispatchQueueScheduler.swift b/RxSwift/RxSwift/Schedulers/SerialDispatchQueueScheduler.swift index 818e7a7ed..7f949e615 100644 --- a/RxSwift/RxSwift/Schedulers/SerialDispatchQueueScheduler.swift +++ b/RxSwift/RxSwift/Schedulers/SerialDispatchQueueScheduler.swift @@ -8,9 +8,6 @@ import Foundation -@available(*, deprecated=1.7, message="Replaced by `SerialDispatchQueueScheduler`") -public typealias DispatchQueueScheduler = SerialDispatchQueueScheduler - // This is a scheduler that wraps dispatch queue. // It can wrap both serial and concurrent dispatch queues. // diff --git a/RxSwift/RxSwift/Subjects/PublishSubject.swift b/RxSwift/RxSwift/Subjects/PublishSubject.swift index b72d6cb09..4a9f4a5cd 100644 --- a/RxSwift/RxSwift/Subjects/PublishSubject.swift +++ b/RxSwift/RxSwift/Subjects/PublishSubject.swift @@ -34,14 +34,6 @@ class Subscription : Disposable { } } -@available(*, deprecated=1.7, message="Replaced by PublishSubject") -public class Subject : PublishSubject { - - public override init() { - super.init() - } -} - public class PublishSubject : SubjectType, Cancelable { typealias ObserverOf = Observer typealias KeyType = Bag.KeyType diff --git a/RxSwift/RxSwift/Subjects/Variable.swift b/RxSwift/RxSwift/Subjects/Variable.swift index 9995c56fa..3c771b8cc 100644 --- a/RxSwift/RxSwift/Subjects/Variable.swift +++ b/RxSwift/RxSwift/Subjects/Variable.swift @@ -16,13 +16,7 @@ public class Variable: BehaviorSubject { super.init(value: value) } - public func next(value: Element) { - sendNext(self, value) + public func sendNext(value: Element) { + self.on(.Next(value)) } -} - - -@available(*, deprecated=1.4, message="Please use variable.next, it's more clear") -public func << (variable: Variable, element: E) { - variable.next(element) } \ No newline at end of file diff --git a/RxTests/RxCocoaTests/KVOObservableTests.swift b/RxTests/RxCocoaTests/KVOObservableTests.swift index 0d378eefe..0ae276765 100644 --- a/RxTests/RxCocoaTests/KVOObservableTests.swift +++ b/RxTests/RxCocoaTests/KVOObservableTests.swift @@ -33,8 +33,8 @@ class Parent : NSObject { super.init() self.rx_observe("val", options: NSKeyValueObservingOptions.Initial.union(.New), retainSelf: false) - >- subscribeNext(callback) - >- disposeBag.addDisposable + .subscribeNext(callback) + .addDisposableTo(disposeBag) } deinit { @@ -48,8 +48,8 @@ class Child : NSObject { init(parent: ParentWithChild, callback: String? -> Void) { super.init() parent.rx_observe("val", options: NSKeyValueObservingOptions.Initial.union(.New), retainSelf: false) - >- subscribeNext(callback) - >- disposeBag.addDisposable + .subscribeNext(callback) + .addDisposableTo(disposeBag) } deinit { @@ -105,7 +105,7 @@ extension KVOObservableTests { var latest: String? - var _d: ScopedDispose? = os >- subscribeNext { latest = $0 } >- scopedDispose + var _d: ScopedDispose? = os .subscribeNext { latest = $0 } .scopedDispose XCTAssertTrue(latest == nil) @@ -139,7 +139,7 @@ extension KVOObservableTests { var latest: String? - var _d: ScopedDispose? = os >- subscribeNext { latest = $0 } >- scopedDispose + var _d: ScopedDispose? = os .subscribeNext { latest = $0 } .scopedDispose XCTAssertTrue(latest == "0") @@ -173,7 +173,7 @@ extension KVOObservableTests { var latest: String? - var _d: ScopedDispose! = os >- subscribeNext { latest = $0 } >- scopedDispose + var _d: ScopedDispose! = os .subscribeNext { latest = $0 } .scopedDispose XCTAssertTrue(latest == "0") @@ -209,7 +209,7 @@ extension KVOObservableTests { } parent.rx_deallocated - >- subscribeCompleted { + .subscribeCompleted { disposed = true } @@ -236,7 +236,7 @@ extension KVOObservableTests { } parent.rx_deallocated - >- subscribeCompleted { + .subscribeCompleted { disposed = true } @@ -267,12 +267,12 @@ extension KVOObservableTests { var root: HasStrongProperty! = HasStrongProperty() root.rx_observeWeakly("property") - >- subscribeNext { (n: String?) in + .subscribeNext { (n: String?) in latest = n } root.rx_deallocated - >- subscribeCompleted { + .subscribeCompleted { disposed = true } @@ -297,12 +297,12 @@ extension KVOObservableTests { var root: HasWeakProperty! = HasWeakProperty() root.rx_observeWeakly("property") - >- subscribeNext { (n: String?) in + .subscribeNext { (n: String?) in latest = n } root.rx_deallocated - >- subscribeCompleted { + .subscribeCompleted { disposed = true } @@ -331,12 +331,12 @@ extension KVOObservableTests { var root: HasWeakProperty! = HasWeakProperty() root.rx_observeWeakly("property.property") - >- subscribeNext { (n: String?) in + .subscribeNext { (n: String?) in latest = n } root.rx_deallocated - >- subscribeCompleted { + .subscribeCompleted { disposed = true } @@ -380,12 +380,12 @@ extension KVOObservableTests { XCTAssertTrue(disposed == false) root.rx_observeWeakly("property.property") - >- subscribeNext { (n: String?) in + .subscribeNext { (n: String?) in latest = n } root.rx_deallocated - >- subscribeCompleted { + .subscribeCompleted { disposed = true } @@ -408,12 +408,12 @@ extension KVOObservableTests { var root: HasStrongProperty! = HasStrongProperty() root.rx_observeWeakly("property.property") - >- subscribeNext { (n: String?) in + .subscribeNext { (n: String?) in latest = n } root.rx_deallocated - >- subscribeCompleted { + .subscribeCompleted { disposed = true } @@ -457,12 +457,12 @@ extension KVOObservableTests { XCTAssertTrue(disposed == false) root.rx_observeWeakly("property.property") - >- subscribeNext { (n: String?) in + .subscribeNext { (n: String?) in latest = n } root.rx_deallocated - >- subscribeCompleted { + .subscribeCompleted { disposed = true } @@ -496,7 +496,7 @@ extension KVOObservableTests { XCTAssertTrue(latest.value == nil) let observable: Observable = root.rx_observeWeakly("property.property") - observable >- subscribeNext { n in + observable .subscribeNext { n in latest?.value = n } @@ -513,7 +513,7 @@ extension KVOObservableTests { var gone = false let (child, latest, dealloc) = _testObserveWeak_Strong_Weak_Observe_NilLastPropertyBecauseOfWeak() dealloc - >- subscribeNext { n in + .subscribeNext { n in gone = true } @@ -538,7 +538,7 @@ extension KVOObservableTests { XCTAssertTrue(latest.value == nil) let observable: Observable = root.rx_observeWeakly("property.property.property") - observable >- subscribeNext { n in + observable .subscribeNext { n in latest?.value = n } @@ -561,7 +561,7 @@ extension KVOObservableTests { var gone = false deallocatedMiddle - >- subscribeCompleted { + .subscribeCompleted { gone = true } @@ -580,7 +580,7 @@ extension KVOObservableTests { XCTAssertTrue(latest.value == nil) root.rx_observeWeakly("property") - >- subscribeNext { (n: String?) in + .subscribeNext { (n: String?) in latest.value = n } @@ -589,7 +589,7 @@ extension KVOObservableTests { var rootDeallocated = false root.rx_deallocated - >- subscribeCompleted { + .subscribeCompleted { rootDeallocated = true } @@ -609,7 +609,7 @@ extension KVOObservableTests { XCTAssertTrue(latest.value == nil) root.rx_observeWeakly("property", options: .New) - >- subscribeNext { (n: String?) in + .subscribeNext { (n: String?) in latest.value = n } @@ -622,7 +622,7 @@ extension KVOObservableTests { var rootDeallocated = false root.rx_deallocated - >- subscribeCompleted { + .subscribeCompleted { rootDeallocated = true } @@ -642,7 +642,7 @@ extension KVOObservableTests { XCTAssertTrue(latest.value == nil) let disposable = root.rx_observe("frame") - >- subscribeNext { (n: NSRect?) in + .subscribeNext { (n: NSRect?) in latest.value = n } XCTAssertTrue(latest.value == root.frame) @@ -654,7 +654,7 @@ extension KVOObservableTests { var rootDeallocated = false root.rx_deallocated - >- subscribeCompleted { + .subscribeCompleted { rootDeallocated = true } @@ -677,10 +677,10 @@ extension KVOObservableTests { XCTAssertTrue(latest.value == nil) let d = root.rx_observe("frame") - >- subscribeNext { (n: CGSize?) in + .subscribeNext { (n: CGSize?) in latest.value = n } - >- scopedDispose + .scopedDispose XCTAssertTrue(latest.value == nil) root.size = CGSizeMake(56, 1) @@ -690,7 +690,7 @@ extension KVOObservableTests { var rootDeallocated = false root.rx_deallocated - >- subscribeCompleted { + .subscribeCompleted { rootDeallocated = true } @@ -708,10 +708,10 @@ extension KVOObservableTests { XCTAssertTrue(latest.value == nil) let d = root.rx_observe("frame") - >- subscribeNext { (n: CGRect?) in + .subscribeNext { (n: CGRect?) in latest.value = n } - >- scopedDispose + .scopedDispose XCTAssertTrue(latest.value == root.frame) root.frame = CGRectMake(-2, 0, 0, 1) @@ -721,7 +721,7 @@ extension KVOObservableTests { var rootDeallocated = false root.rx_deallocated - >- subscribeCompleted { + .subscribeCompleted { rootDeallocated = true } @@ -739,10 +739,10 @@ extension KVOObservableTests { XCTAssertTrue(latest.value == nil) let d = root.rx_observe("size") - >- subscribeNext { (n: CGSize?) in + .subscribeNext { (n: CGSize?) in latest.value = n } - >- scopedDispose + .scopedDispose XCTAssertTrue(latest.value == root.size) root.size = CGSizeMake(56, 1) @@ -752,7 +752,7 @@ extension KVOObservableTests { var rootDeallocated = false root.rx_deallocated - >- subscribeCompleted { + .subscribeCompleted { rootDeallocated = true } @@ -770,10 +770,10 @@ extension KVOObservableTests { XCTAssertTrue(latest.value == nil) let d = root.rx_observe("point") - >- subscribeNext { (n: CGPoint?) in + .subscribeNext { (n: CGPoint?) in latest.value = n } - >- scopedDispose + .scopedDispose XCTAssertTrue(latest.value == root.point) @@ -784,7 +784,7 @@ extension KVOObservableTests { var rootDeallocated = false root.rx_deallocated - >- subscribeCompleted { + .subscribeCompleted { rootDeallocated = true } @@ -803,7 +803,7 @@ extension KVOObservableTests { XCTAssertTrue(latest.value == nil) root.rx_observeWeakly("frame") - >- subscribeNext { (n: CGRect?) in + .subscribeNext { (n: CGRect?) in latest.value = n } XCTAssertTrue(latest.value == root.frame) @@ -815,7 +815,7 @@ extension KVOObservableTests { var rootDeallocated = false root.rx_deallocated - >- subscribeCompleted { + .subscribeCompleted { rootDeallocated = true } @@ -833,7 +833,7 @@ extension KVOObservableTests { XCTAssertTrue(latest.value == nil) root.rx_observeWeakly("size") - >- subscribeNext { (n: CGSize?) in + .subscribeNext { (n: CGSize?) in latest.value = n } XCTAssertTrue(latest.value == root.size) @@ -845,7 +845,7 @@ extension KVOObservableTests { var rootDeallocated = false root.rx_deallocated - >- subscribeCompleted { + .subscribeCompleted { rootDeallocated = true } @@ -863,7 +863,7 @@ extension KVOObservableTests { XCTAssertTrue(latest.value == nil) root.rx_observeWeakly("point") - >- subscribeNext { (n: CGPoint?) in + .subscribeNext { (n: CGPoint?) in latest.value = n } @@ -876,7 +876,7 @@ extension KVOObservableTests { var rootDeallocated = false root.rx_deallocated - >- subscribeCompleted { + .subscribeCompleted { rootDeallocated = true } @@ -894,7 +894,7 @@ extension KVOObservableTests { XCTAssertTrue(latest.value == nil) root.rx_observeWeakly("integer") - >- subscribeNext { (n: NSNumber?) in + .subscribeNext { (n: NSNumber?) in latest.value = n?.integerValue } XCTAssertTrue(latest.value == root.integer) @@ -906,7 +906,7 @@ extension KVOObservableTests { var rootDeallocated = false root.rx_deallocated - >- subscribeCompleted { + .subscribeCompleted { rootDeallocated = true } @@ -921,8 +921,8 @@ extension KVOObservableTests { var lastError: ErrorType? = nil - root.rx_observeWeakly("notExist") as Observable - >- subscribeError { error in + (root.rx_observeWeakly("notExist") as Observable) + .subscribeError { error in lastError = error } @@ -931,7 +931,7 @@ extension KVOObservableTests { var rootDeallocated = false root.rx_deallocated - >- subscribeCompleted { + .subscribeCompleted { rootDeallocated = true } @@ -945,10 +945,10 @@ extension KVOObservableTests { var lastError: ErrorType? = nil - root.rx_observeWeakly("property.notExist") as Observable - >- subscribeError { error in + (root.rx_observeWeakly("property.notExist") as Observable) + .subscribeError { error in lastError = error - } + } XCTAssertTrue(lastError == nil) @@ -959,7 +959,7 @@ extension KVOObservableTests { var rootDeallocated = false root.rx_deallocated - >- subscribeCompleted { + .subscribeCompleted { rootDeallocated = true } diff --git a/RxTests/RxCocoaTests/NSNotificationCenterTests.swift b/RxTests/RxCocoaTests/NSNotificationCenterTests.swift index 2b77e08da..68d3abff0 100644 --- a/RxTests/RxCocoaTests/NSNotificationCenterTests.swift +++ b/RxTests/RxCocoaTests/NSNotificationCenterTests.swift @@ -22,7 +22,7 @@ class NSNotificationCenterTests : RxTest { XCTAssertTrue(numberOfNotifications == 0) let subscription = notificationCenter.rx_notification("testNotification", object: nil) - >- subscribeNext { n in + .subscribeNext { n in numberOfNotifications++ } @@ -58,7 +58,7 @@ class NSNotificationCenterTests : RxTest { XCTAssertTrue(numberOfNotifications == 0) let subscription = notificationCenter.rx_notification("testNotification", object: targetObject) - >- subscribeNext { n in + .subscribeNext { n in numberOfNotifications++ } diff --git a/RxTests/RxCocoaTests/NSObject+RxTests.swift b/RxTests/RxCocoaTests/NSObject+RxTests.swift index 8aed7bce9..60331d08e 100644 --- a/RxTests/RxCocoaTests/NSObject+RxTests.swift +++ b/RxTests/RxCocoaTests/NSObject+RxTests.swift @@ -23,10 +23,10 @@ extension NSObjectTests { var fired = false a.rx_deallocated - >- map { _ in + .map { _ in return 1 } - >- subscribeNext { _ in + .subscribeNext { _ in fired = true } @@ -43,10 +43,10 @@ extension NSObjectTests { var fired = false a.rx_deallocated - >- map { _ in + .map { _ in return 1 } - >- subscribeCompleted { + .subscribeCompleted { fired = true } @@ -63,13 +63,13 @@ extension NSObjectTests { var fired = false a.rx_deallocated - >- map { _ in + .map { _ in return 1 } - >- subscribeNext { _ in + .subscribeNext { _ in fired = true } - >- scopedDispose + .scopedDispose XCTAssertFalse(fired) @@ -88,10 +88,10 @@ extension NSObjectTests { var fired = false a.rx_deallocating - >- map { _ in + .map { _ in return 1 } - >- subscribeNext { _ in + .subscribeNext { _ in fired = true } @@ -108,10 +108,10 @@ extension NSObjectTests { var fired = false a.rx_deallocating - >- map { _ in + .map { _ in return 1 } - >- subscribeCompleted { + .subscribeCompleted { fired = true } @@ -128,13 +128,13 @@ extension NSObjectTests { var fired = false a.rx_deallocating - >- map { _ in + .map { _ in return 1 } - >- subscribeNext { _ in + .subscribeNext { _ in fired = true } - >- scopedDispose + .scopedDispose XCTAssertFalse(fired) diff --git a/RxTests/RxCocoaTests/UI+RxTests.swift b/RxTests/RxCocoaTests/UI+RxTests.swift index 325b1db95..f35376485 100644 --- a/RxTests/RxCocoaTests/UI+RxTests.swift +++ b/RxTests/RxCocoaTests/UI+RxTests.swift @@ -17,7 +17,7 @@ class UITextFieldMock { var text: String! = "" { didSet { - observableText.next(self.text) + observableText.sendNext(self.text) } } @@ -26,14 +26,17 @@ class UITextFieldMock { } } +extension ObservableType where E == String { + func subscribeTextOf(label: UILabelMock) -> Disposable { + return self.subscribeNext { t in + label.text = t + } + } +} + class UILabelMock { var text: String! = "" - func rx_subscribeTextTo(source: Observable) -> Disposable { - return source >- subscribeNext { t in - self.text = t - } - } } class UIRxTests : RxTest { @@ -44,7 +47,7 @@ class UIRxTests : RxTest { func testReadmeExample() { // We have some async Wolfram Alpha API that calculates is number prime. - let WolframAlphaIsPrime: (Int) -> Observable = { returnElement(PrimeNumber($0, isPrime($0))) } + let WolframAlphaIsPrime: (Int) -> Observable = { just(PrimeNumber($0, isPrime($0))) } let text = Variable("") let resultText = "" @@ -54,11 +57,11 @@ class UIRxTests : RxTest { let resultLabel = UILabelMock() let disposable = primeTextField.rx_text() - >- map { WolframAlphaIsPrime(Int($0) ?? 0) } - >- concat - >- map { "number \($0.n) is prime? \($0.isPrime)" } - >- resultLabel.rx_subscribeTextTo - >- scopedDispose + .map { WolframAlphaIsPrime(Int($0) ?? 0) } + .concat + .map { "number \($0.n) is prime? \($0.isPrime)" } + .subscribeTextOf(resultLabel) + .scopedDispose // this will set resultLabel.text! == "number 43 is prime? true" primeTextField.text = "43" diff --git a/RxTests/RxCocoaTests/UIControl+RxTests.swift b/RxTests/RxCocoaTests/UIControl+RxTests.swift index d1aa66d86..e1fd892ff 100644 --- a/RxTests/RxCocoaTests/UIControl+RxTests.swift +++ b/RxTests/RxCocoaTests/UIControl+RxTests.swift @@ -15,18 +15,18 @@ class UIControlRxTests : RxTest { func testSubscribeEnabledToTrue() { let subject = UIControl() let enabledSequence = Variable(false) - let disposable = enabledSequence >- subject.rx_subscribeEnabledTo + let disposable = enabledSequence.subscribeEnabledOf(subject) - enabledSequence.next(true) + enabledSequence.sendNext(true) XCTAssert(subject.enabled == true, "Expected enabled set to true") } func testSubscribeEnabledToFalse() { let subject = UIControl() let enabledSequence = Variable(true) - let disposable = enabledSequence >- subject.rx_subscribeEnabledTo + let disposable = enabledSequence.subscribeEnabledOf(subject) - enabledSequence.next(false) + enabledSequence.sendNext(false) XCTAssert(subject.enabled == false, "Expected enabled set to false") } } diff --git a/RxTests/RxSwiftTests/TestImplementations/Mocks/ConnectableObservable.swift b/RxTests/RxSwiftTests/TestImplementations/Mocks/ConnectableObservable.swift index 58d78b198..7b27e34d0 100644 --- a/RxTests/RxSwiftTests/TestImplementations/Mocks/ConnectableObservable.swift +++ b/RxTests/RxSwiftTests/TestImplementations/Mocks/ConnectableObservable.swift @@ -13,7 +13,7 @@ class ConnectableObservable : ConnectableObservableType { let _o: ConnectableObservableType init(o: Observable, s: SubjectType) { - _o = o >- multicast(s) + _o = o .multicast(s) super.init() } diff --git a/RxTests/RxSwiftTests/Tests/AnonymousObservable+Test.swift b/RxTests/RxSwiftTests/Tests/AnonymousObservable+Test.swift index c56f4162e..9c41a1e21 100644 --- a/RxTests/RxSwiftTests/Tests/AnonymousObservable+Test.swift +++ b/RxTests/RxSwiftTests/Tests/AnonymousObservable+Test.swift @@ -24,7 +24,7 @@ extension AnonymousObservableTests { var elements = [Int]() - let d = a >- subscribeNext { n in + let d = a .subscribeNext { n in elements.append(n) } @@ -48,7 +48,7 @@ extension AnonymousObservableTests { var elements = [Int]() - let d = a >- subscribeNext { n in + let d = a .subscribeNext { n in elements.append(n) } @@ -72,7 +72,7 @@ extension AnonymousObservableTests { var elements = [Int]() - let d = a >- subscribeNext { n in + let d = a .subscribeNext { n in elements.append(n) } diff --git a/RxTests/RxSwiftTests/Tests/AssumptionsTest.swift b/RxTests/RxSwiftTests/Tests/AssumptionsTest.swift index 4bed22750..19dc5f26c 100644 --- a/RxTests/RxSwiftTests/Tests/AssumptionsTest.swift +++ b/RxTests/RxSwiftTests/Tests/AssumptionsTest.swift @@ -66,12 +66,12 @@ class AssumptionsTest : RxTest { func testFunctionReturnValueOverload() { returnSomething() - >- subscribeNext { (n: AnyObject?) in + .subscribeNext { (n: AnyObject?) in XCTAssertEqual("\(n ?? NSNull())", "a") } returnSomething() - >- subscribeNext { (n: CGRect?) in + .subscribeNext { (n: CGRect?) in XCTAssertEqual(n!, CGRectMake(0, 0, 100, 100)) } } diff --git a/RxTests/RxSwiftTests/Tests/DelegateProxyTest.swift b/RxTests/RxSwiftTests/Tests/DelegateProxyTest.swift index af5699796..a490c139d 100644 --- a/RxTests/RxSwiftTests/Tests/DelegateProxyTest.swift +++ b/RxTests/RxSwiftTests/Tests/DelegateProxyTest.swift @@ -151,10 +151,10 @@ class DelegateProxyTest : RxTest { var observedFeedRequest = false let d = view.rx_proxy.observe("threeDView:didLearnSomething:") - >- subscribeNext { n in + .subscribeNext { n in observedFeedRequest = true } - >- scopedDispose + .scopedDispose XCTAssertTrue(!observedFeedRequest) view.delegate?.threeDView?(view, didLearnSomething: "Psssst ...") @@ -172,16 +172,16 @@ class DelegateProxyTest : RxTest { var nMessages = 0 var d = view.rx_proxy.observe("threeDView:didLearnSomething:") - >- subscribeNext { n in + .subscribeNext { n in nMessages++ } - >- scopedDispose + .scopedDispose XCTAssertTrue(nMessages == 0) view.delegate?.threeDView?(view, didLearnSomething: "Psssst ...") XCTAssertTrue(nMessages == 1) - d = scopedDispose(NopDisposable.instance) + d = NopDisposable.instance.scopedDispose view.delegate?.threeDView?(view, didLearnSomething: "Psssst ...") XCTAssertTrue(nMessages == 1) @@ -211,11 +211,11 @@ class DelegateProxyTest : RxTest { var receivedArgument: NSIndexPath? = nil let d = view.rx_proxy.observe("threeDView:didGetXXX:") - >- subscribeNext { n in + .subscribeNext { n in let ip = n[1] as! NSIndexPath receivedArgument = ip } - >- scopedDispose + .scopedDispose XCTAssertTrue(receivedArgument === nil) view.delegate?.threeDView?(view, didGetXXX: sentArgument) @@ -240,7 +240,7 @@ class DelegateProxyTest : RxTest { var receivedArgument: NSIndexPath? = nil view.rx_proxy.observe("threeDView:didGetXXX:") - >- subscribeCompleted { + .subscribeCompleted { completed.value = true } diff --git a/RxTests/RxSwiftTests/Tests/Observable+AggregateTest.swift b/RxTests/RxSwiftTests/Tests/Observable+AggregateTest.swift index 2f2937454..2c427bb45 100644 --- a/RxTests/RxSwiftTests/Tests/Observable+AggregateTest.swift +++ b/RxTests/RxSwiftTests/Tests/Observable+AggregateTest.swift @@ -30,7 +30,7 @@ extension ObservableAggregateTest { ]) - let res = scheduler.start { xs >- aggregate(42, +) } + let res = scheduler.start { xs.aggregate(42, +) } let correctMessages = [ next(250, 42), @@ -54,7 +54,7 @@ extension ObservableAggregateTest { completed(250) ]) - let res = scheduler.start { xs >- aggregate(42, +) } + let res = scheduler.start { xs.aggregate(42, +) } let correctMessages = [ next(250, 42 + 24), @@ -77,7 +77,7 @@ extension ObservableAggregateTest { error(210, testError), ]) - let res = scheduler.start { xs >- aggregate(42, +) } + let res = scheduler.start { xs.aggregate(42, +) } let correctMessages: [Recorded] = [ error(210, testError) @@ -98,7 +98,7 @@ extension ObservableAggregateTest { next(150, 1), ]) - let res = scheduler.start { xs >- aggregate(42, +) } + let res = scheduler.start { xs.aggregate(42, +) } let correctMessages: [Recorded] = [ ] @@ -124,7 +124,7 @@ extension ObservableAggregateTest { completed(260) ]) - let res = scheduler.start { xs >- aggregate(42, +) } + let res = scheduler.start { xs.aggregate(42, +) } let correctMessages: [Recorded] = [ next(260, 42 + 0 + 1 + 2 + 3 + 4), @@ -152,7 +152,7 @@ extension ObservableAggregateTest { completed(260) ]) - let res = scheduler.start { xs >- aggregateOrDie(42, { $1 < 3 ? success($0 + $1) : failure(testError)}) } + let res = scheduler.start { xs.aggregateOrDie(42, { $1 < 3 ? success($0 + $1) : failure(testError)}) } let correctMessages: [Recorded] = [ error(240, testError) @@ -174,7 +174,7 @@ extension ObservableAggregateTest { completed(250) ]) - let res = scheduler.start { xs >- aggregate(42, +, { $0 * 5 }) } + let res = scheduler.start { xs.aggregate(42, +, { $0 * 5 }) } let correctMessages = [ next(250, 42 * 5), @@ -198,7 +198,7 @@ extension ObservableAggregateTest { completed(250) ]) - let res = scheduler.start { xs >- aggregate(42, { $0 + $1 }, { $0 * 5 }) } + let res = scheduler.start { xs.aggregate(42, { $0 + $1 }, { $0 * 5 }) } let correctMessages = [ next(250, (42 + 24) * 5), @@ -221,7 +221,7 @@ extension ObservableAggregateTest { error(210, testError), ]) - let res = scheduler.start { xs >- aggregate(42, { $0 + $1 }, { $0 * 5 }) } + let res = scheduler.start { xs.aggregate(42, { $0 + $1 }, { $0 * 5 }) } let correctMessages: [Recorded] = [ error(210, testError) @@ -242,7 +242,7 @@ extension ObservableAggregateTest { next(150, 1), ]) - let res = scheduler.start { xs >- aggregate(42, { $0 + $1 }, { $0 * 5 }) } + let res = scheduler.start { xs.aggregate(42, { $0 + $1 }, { $0 * 5 }) } let correctMessages: [Recorded] = [ ] @@ -268,7 +268,7 @@ extension ObservableAggregateTest { completed(260) ]) - let res = scheduler.start { xs >- aggregate(42, { $0 + $1 }, { $0 * 5 }) } + let res = scheduler.start { xs.aggregate(42, { $0 + $1 }, { $0 * 5 }) } let correctMessages: [Recorded] = [ next(260, (42 + 0 + 1 + 2 + 3 + 4) * 5), @@ -296,7 +296,7 @@ extension ObservableAggregateTest { completed(260) ]) - let res = scheduler.start { xs >- aggregateOrDie(42, { $1 < 3 ? success($0 + $1) : failure(testError) }, { success($0 * 5) }) } + let res = scheduler.start { xs.aggregateOrDie(42, { $1 < 3 ? success($0 + $1) : failure(testError) }, { success($0 * 5) }) } let correctMessages: [Recorded] = [ error(240, testError) @@ -323,7 +323,7 @@ extension ObservableAggregateTest { completed(260) ]) - let res = scheduler.start { xs >- aggregateOrDie(42, { success($0 + $1) }, { (_: Int) -> RxResult in failure(testError) }) } + let res = scheduler.start { xs.aggregateOrDie(42, { success($0 + $1) }, { (_: Int) -> RxResult in failure(testError) }) } let correctMessages: [Recorded] = [ error(260, testError) diff --git a/RxTests/RxSwiftTests/Tests/Observable+BindingTest.swift b/RxTests/RxSwiftTests/Tests/Observable+BindingTest.swift index af843b92f..a05000b8e 100644 --- a/RxTests/RxSwiftTests/Tests/Observable+BindingTest.swift +++ b/RxTests/RxSwiftTests/Tests/Observable+BindingTest.swift @@ -21,10 +21,10 @@ extension ObservableBindingTest { var nEvents = 0 - let observable = ConnectableObservable(o: returnElements(0, 1, 2), s: subject) - let _d = observable >- subscribeNext { n in + let observable = ConnectableObservable(o: sequence(0, 1, 2), s: subject) + let _d = observable .subscribeNext { n in nEvents++ - } >- scopedDispose + } .scopedDispose observable.connect().dispose() @@ -36,10 +36,10 @@ extension ObservableBindingTest { var nEvents = 0 - let observable = ConnectableObservable(o: concat([returnElements(0, 1, 2), failWith(testError)]), s: subject) - let _d = observable >- subscribeError { n in + let observable = ConnectableObservable(o: concat([sequence(0, 1, 2), failWith(testError)]), s: subject) + let _d = observable .subscribeError { n in nEvents++ - } >- scopedDispose + } .scopedDispose observable.connect().dispose() @@ -52,9 +52,9 @@ extension ObservableBindingTest { var nEvents = 0 let observable = ConnectableObservable(o: failWith(testError), s: subject) - let _d = observable >- subscribeError { n in + let _d = observable .subscribeError { n in nEvents++ - } >- scopedDispose + } .scopedDispose observable.connect().dispose() @@ -67,9 +67,9 @@ extension ObservableBindingTest { var nEvents = 0 let observable = ConnectableObservable(o: empty(), s: subject) - let d = observable >- subscribeCompleted { + let d = observable .subscribeCompleted { nEvents++ - } >- scopedDispose + } .scopedDispose observable.connect().dispose() @@ -91,7 +91,7 @@ extension ObservableBindingTest { let conn = ConnectableObservable(o: xs, s: subject) - let res = scheduler.start { conn >- refCount } + let res = scheduler.start { conn .refCount } XCTAssertEqual(res.messages, [ next(210, 1), @@ -122,7 +122,7 @@ extension ObservableBindingTest { let subject = MySubject() let conn = ConnectableObservable(o: xs, s: subject) - let refd = conn >- refCount + let refd = conn .refCount let dis1 = refd.subscribe(NopObserver()) XCTAssertEqual(1, count) @@ -152,8 +152,8 @@ extension ObservableBindingTest { func testRefCount_Error() { let xs: Observable = failWith(testError) - let res = xs >- publish >- refCount - res >- subscribe { event in + let res = xs.publish .refCount + res .subscribe { event in switch event { case .Next: XCTAssertTrue(false) @@ -163,7 +163,7 @@ extension ObservableBindingTest { XCTAssertTrue(false) } } - res >- subscribe { event in + res .subscribe { event in switch event { case .Next: XCTAssertTrue(false) @@ -191,7 +191,7 @@ extension ObservableBindingTest { completed(300) ]) - let res = xs >- publish >- refCount + let res = xs.publish .refCount var d1: Disposable! let o1: MockObserver = scheduler.createObserver() @@ -249,10 +249,10 @@ extension ObservableBindingTest { func testReplay_DeadlockSimple() { var nEvents = 0 - let observable = returnElements(0, 1, 2) >- replay(3) >- refCount - _ = observable >- subscribeNext { n in + let observable = sequence(0, 1, 2).replay(3).refCount + _ = observable .subscribeNext { n in nEvents++ - } >- scopedDispose + } .scopedDispose XCTAssertEqual(nEvents, 3) } @@ -260,10 +260,10 @@ extension ObservableBindingTest { func testReplay_DeadlockErrorAfterN() { var nEvents = 0 - let observable = concat([returnElements(0, 1, 2), failWith(testError)]) >- replay(3) >- refCount - _ = observable >- subscribeError { n in + let observable = concat([sequence(0, 1, 2), failWith(testError)]).replay(3).refCount + _ = observable .subscribeError { n in nEvents++ - } >- scopedDispose + } .scopedDispose XCTAssertEqual(nEvents, 1) } @@ -271,10 +271,10 @@ extension ObservableBindingTest { func testReplay_DeadlockErrorImmediatelly() { var nEvents = 0 - let observable: Observable = failWith(testError) >- replay(3) >- refCount - _ = observable >- subscribeError { n in + let observable: Observable = failWith(testError).replay(3).refCount + _ = observable .subscribeError { n in nEvents++ - } >- scopedDispose + } .scopedDispose XCTAssertEqual(nEvents, 1) } @@ -282,10 +282,10 @@ extension ObservableBindingTest { func testReplay_DeadlockEmpty() { var nEvents = 0 - let observable: Observable = empty() >- replay(3) >- refCount - _ = observable >- subscribeCompleted { + let observable: Observable = empty().replay(3).refCount + _ = observable .subscribeCompleted { nEvents++ - } >- scopedDispose + } .scopedDispose XCTAssertEqual(nEvents, 1) } @@ -293,10 +293,10 @@ extension ObservableBindingTest { func testReplay1_DeadlockSimple() { var nEvents = 0 - let observable = returnElements(0, 1, 2) >- replay(1) >- refCount - _ = observable >- subscribeNext { n in + let observable = sequence(0, 1, 2).replay(1).refCount + _ = observable .subscribeNext { n in nEvents++ - } >- scopedDispose + } .scopedDispose XCTAssertEqual(nEvents, 3) } @@ -304,10 +304,10 @@ extension ObservableBindingTest { func testReplay1_DeadlockErrorAfterN() { var nEvents = 0 - let observable = concat([returnElement(0, 1, 2), failWith(testError)]) >- replay(1) >- refCount - _ = observable >- subscribeError { n in + let observable = concat([just(0, 1, 2), failWith(testError)]).replay(1).refCount + _ = observable .subscribeError { n in nEvents++ - } >- scopedDispose + } .scopedDispose XCTAssertEqual(nEvents, 1) } @@ -315,10 +315,10 @@ extension ObservableBindingTest { func testReplay1_DeadlockErrorImmediatelly() { var nEvents = 0 - let observable: Observable = failWith(testError) >- replay(1) >- refCount - _ = observable >- subscribeError { n in + let observable: Observable = failWith(testError).replay(1).refCount + _ = observable .subscribeError { n in nEvents++ - } >- scopedDispose + } .scopedDispose XCTAssertEqual(nEvents, 1) } @@ -326,10 +326,10 @@ extension ObservableBindingTest { func testReplay1_DeadlockEmpty() { var nEvents = 0 - let observable: Observable = empty() >- replay(1) >- refCount - _ = observable >- subscribeCompleted { + let observable: Observable = empty().replay(1).refCount + _ = observable .subscribeCompleted { nEvents++ - } >- scopedDispose + } .scopedDispose XCTAssertEqual(nEvents, 1) } @@ -359,7 +359,7 @@ extension ObservableBindingTest { var connection: Disposable! = nil let res: MockObserver = scheduler.createObserver() - scheduler.scheduleAt(Defaults.created) { ys = xs >- replay(3) } + scheduler.scheduleAt(Defaults.created) { ys = xs.replay(3) } scheduler.scheduleAt(450, action: { subscription = ys.subscribe(res) }) scheduler.scheduleAt(Defaults.disposed) { subscription.dispose() } @@ -413,7 +413,7 @@ extension ObservableBindingTest { var connection: Disposable! = nil let res: MockObserver = scheduler.createObserver() - scheduler.scheduleAt(Defaults.created) { ys = xs >- replay(3) } + scheduler.scheduleAt(Defaults.created) { ys = xs.replay(3) } scheduler.scheduleAt(450, action: { subscription = ys.subscribe(res) }) scheduler.scheduleAt(Defaults.disposed) { subscription.dispose() } @@ -465,7 +465,7 @@ extension ObservableBindingTest { var connection: Disposable! = nil let res: MockObserver = scheduler.createObserver() - scheduler.scheduleAt(Defaults.created) { ys = xs >- replay(3) } + scheduler.scheduleAt(Defaults.created) { ys = xs.replay(3) } scheduler.scheduleAt(450, action: { subscription = ys.subscribe(res) }) scheduler.scheduleAt(Defaults.disposed) { subscription.dispose() } @@ -517,7 +517,7 @@ extension ObservableBindingTest { var connection: Disposable! = nil let res: MockObserver = scheduler.createObserver() - scheduler.scheduleAt(Defaults.created) { ys = xs >- replay(3) } + scheduler.scheduleAt(Defaults.created) { ys = xs.replay(3) } scheduler.scheduleAt(450, action: { subscription = ys.subscribe(res) }) scheduler.scheduleAt(475) { subscription.dispose() } @@ -570,7 +570,7 @@ extension ObservableBindingTest { var connection: Disposable! = nil let res: MockObserver = scheduler.createObserver() - scheduler.scheduleAt(Defaults.created) { ys = xs >- replay(1) } + scheduler.scheduleAt(Defaults.created) { ys = xs.replay(1) } scheduler.scheduleAt(450, action: { subscription = ys.subscribe(res) }) scheduler.scheduleAt(Defaults.disposed) { subscription.dispose() } @@ -622,7 +622,7 @@ extension ObservableBindingTest { var connection: Disposable! = nil let res: MockObserver = scheduler.createObserver() - scheduler.scheduleAt(Defaults.created) { ys = xs >- replay(1) } + scheduler.scheduleAt(Defaults.created) { ys = xs.replay(1) } scheduler.scheduleAt(450, action: { subscription = ys.subscribe(res) }) scheduler.scheduleAt(Defaults.disposed) { subscription.dispose() } @@ -672,7 +672,7 @@ extension ObservableBindingTest { var connection: Disposable! = nil let res: MockObserver = scheduler.createObserver() - scheduler.scheduleAt(Defaults.created) { ys = xs >- replay(1) } + scheduler.scheduleAt(Defaults.created) { ys = xs.replay(1) } scheduler.scheduleAt(450, action: { subscription = ys.subscribe(res) }) scheduler.scheduleAt(Defaults.disposed) { subscription.dispose() } @@ -722,7 +722,7 @@ extension ObservableBindingTest { var connection: Disposable! = nil let res: MockObserver = scheduler.createObserver() - scheduler.scheduleAt(Defaults.created) { ys = xs >- replay(1) } + scheduler.scheduleAt(Defaults.created) { ys = xs.replay(1) } scheduler.scheduleAt(450, action: { subscription = ys.subscribe(res) }) scheduler.scheduleAt(475) { subscription.dispose() } diff --git a/RxTests/RxSwiftTests/Tests/Observable+BlockingTest.swift b/RxTests/RxSwiftTests/Tests/Observable+BlockingTest.swift index d083500c6..4aa2b170d 100644 --- a/RxTests/RxSwiftTests/Tests/Observable+BlockingTest.swift +++ b/RxTests/RxSwiftTests/Tests/Observable+BlockingTest.swift @@ -22,27 +22,27 @@ class ObservableBlockingTest : RxTest { extension ObservableBlockingTest { func testToArray_empty() { - XCTAssert((empty() as Observable >- toArray).get() == []) + XCTAssert(((empty() as Observable).toArray()).get() == []) } func testToArray_return() { - XCTAssert((just(42) >- toArray).get() == [42]) + XCTAssert((just(42).toArray()).get() == [42]) } func testToArray_fail() { - XCTAssert((failWith(testError) as Observable >- toArray).isFailure) + XCTAssert(((failWith(testError) as Observable).toArray()).isFailure) } func testToArray_someData() { - XCTAssert((returnElements(42, 43, 44, 45) >- toArray).get() == [42, 43, 44, 45]) + XCTAssert((sequence(42, 43, 44, 45).toArray()).get() == [42, 43, 44, 45]) } func testToArray_withRealScheduler() { let scheduler = ConcurrentDispatchQueueScheduler(globalConcurrentQueuePriority: .Default) let array = interval(0.001, scheduler) - >- take(10) - >- toArray + .take(10) + .toArray() XCTAssert(array.get() == Array(0..<10)) } @@ -52,27 +52,27 @@ extension ObservableBlockingTest { extension ObservableBlockingTest { func testFirst_empty() { - XCTAssert((empty() as Observable >- first).get() == nil) + XCTAssert(((empty() as Observable).first).get() == nil) } func testFirst_return() { - XCTAssert((just(42) >- first).get() == 42) + XCTAssert((just(42).first).get() == 42) } func testFirst_fail() { - XCTAssert((failWith(testError) as Observable >- first).isFailure) + XCTAssert(((failWith(testError) as Observable).first).isFailure) } func testFirst_someData() { - XCTAssert((returnElements(42, 43, 44, 45) >- first).get() == 42) + XCTAssert((sequence(42, 43, 44, 45).first).get() == 42) } func testFirst_withRealScheduler() { let scheduler = ConcurrentDispatchQueueScheduler(globalConcurrentQueuePriority: .Default) let array = interval(0.001, scheduler) - >- take(10) - >- first + .take(10) + .first XCTAssert(array.get() == 0) } @@ -82,27 +82,27 @@ extension ObservableBlockingTest { extension ObservableBlockingTest { func testLast_empty() { - XCTAssert((empty() as Observable >- last).get() == nil) + XCTAssert(((empty() as Observable).last).get() == nil) } func testLast_return() { - XCTAssert((just(42) >- last).get() == 42) + XCTAssert((just(42).last).get() == 42) } func testLast_fail() { - XCTAssert((failWith(testError) as Observable >- last).isFailure) + XCTAssert(((failWith(testError) as Observable).last).isFailure) } func testLast_someData() { - XCTAssert((returnElements(42, 43, 44, 45) >- last).get() == 45) + XCTAssert((sequence(42, 43, 44, 45).last).get() == 45) } func testLast_withRealScheduler() { let scheduler = ConcurrentDispatchQueueScheduler(globalConcurrentQueuePriority: .Default) let array = interval(0.001, scheduler) - >- take(10) - >- last + .take(10) + .last XCTAssert(array.get() == 9) } diff --git a/RxTests/RxSwiftTests/Tests/Observable+ConcurrencyTest.swift b/RxTests/RxSwiftTests/Tests/Observable+ConcurrencyTest.swift index ba1171ec3..fdcad57e5 100644 --- a/RxTests/RxSwiftTests/Tests/Observable+ConcurrencyTest.swift +++ b/RxTests/RxSwiftTests/Tests/Observable+ConcurrencyTest.swift @@ -38,10 +38,11 @@ extension ObservableConcurrencyTest { var nEvents = 0 - let observable = returnElement(0) >- observeSingleOn(scheduler) - let _d = observable >- subscribeNext { n in - nEvents++ - } >- scopedDispose + let observable = just(0).observeSingleOn(scheduler) + let _d = observable .subscribeNext { n in + nEvents++ + } + .scopedDispose scheduler.start() @@ -53,10 +54,11 @@ extension ObservableConcurrencyTest { var nEvents = 0 - let observable: Observable = failWith(testError) >- observeSingleOn(scheduler) - let _d = observable >- subscribeError { n in - nEvents++ - } >- scopedDispose + let observable: Observable = failWith(testError).observeSingleOn(scheduler) + let _d = observable.subscribeError { n in + nEvents++ + } + .scopedDispose scheduler.start() @@ -68,10 +70,11 @@ extension ObservableConcurrencyTest { var nEvents = 0 - let observable: Observable = empty() >- observeSingleOn(scheduler) - let _d = observable >- subscribeCompleted { - nEvents++ - } >- scopedDispose + let observable: Observable = empty().observeSingleOn(scheduler) + let _d = observable .subscribeCompleted { + nEvents++ + } + .scopedDispose scheduler.start() @@ -82,10 +85,10 @@ extension ObservableConcurrencyTest { let scheduler = TestScheduler(initialClock: 0) let xs = scheduler.createHotObservable([ - next(150, 1), + next(150, 1), ]) - let res = scheduler.start { xs >- observeSingleOn(scheduler) } + let res = scheduler.start { xs.observeSingleOn(scheduler) } let correctMessages: [Recorded] = [ ] @@ -106,7 +109,7 @@ extension ObservableConcurrencyTest { completed(300) ]) - let res = scheduler.start { xs >- observeSingleOn(scheduler) } + let res = scheduler.start { xs.observeSingleOn(scheduler) } let correctMessages: [Recorded] = [ completed(301) @@ -129,7 +132,7 @@ extension ObservableConcurrencyTest { completed(300) ]) - let res = scheduler.start { xs >- observeSingleOn(scheduler) } + let res = scheduler.start { xs.observeSingleOn(scheduler) } let correctMessages: [Recorded] = [ next(301, 0), @@ -152,7 +155,7 @@ extension ObservableConcurrencyTest { error(300, testError) ]) - let res = scheduler.start { xs >- observeSingleOn(scheduler) } + let res = scheduler.start { xs.observeSingleOn(scheduler) } let correctMessages: [Recorded] = [ error(301, testError) @@ -175,7 +178,7 @@ extension ObservableConcurrencyTest { error(300, testError) ]) - let res = scheduler.start(290) { xs >- observeSingleOn(scheduler) } + let res = scheduler.start(290) { xs.observeSingleOn(scheduler) } let correctMessages: [Recorded] = [ ] @@ -194,7 +197,7 @@ extension ObservableConcurrencyTest { func runDispatchQueueSchedulerTests(tests: (scheduler: SerialDispatchQueueScheduler) -> Disposable) { let scheduler = SerialDispatchQueueScheduler(internalSerialQueueName: "testQueue1") - let _ = runDispatchQueueSchedulerTests(scheduler, tests: tests) >- scopedDispose + let _ = runDispatchQueueSchedulerTests(scheduler, tests: tests).scopedDispose } func runDispatchQueueSchedulerTests(scheduler: SerialDispatchQueueScheduler, tests: (scheduler: SerialDispatchQueueScheduler) -> Disposable) -> Disposable { @@ -234,8 +237,9 @@ extension ObservableConcurrencyTest { var didExecute = false runDispatchQueueSchedulerTests { scheduler in - let observable = returnElement(0) >- observeOn(scheduler) - return observable >- subscribeNext { n in + let observable = just(0) + .observeOn(scheduler) + return observable .subscribeNext { n in didExecute = true XCTAssert(NSThread.currentThread() !== unitTestsThread) } @@ -250,7 +254,8 @@ extension ObservableConcurrencyTest { func testObserveOnDispatchQueue_EnsureCorrectImplementationIsChosen() { runDispatchQueueSchedulerTests { scheduler in XCTAssert(numberOfSerialDispatchQueueObservables == 0) - let observable = returnElement(0) >- observeOn(scheduler) + let observable = just(0) + .observeOn(scheduler) XCTAssert(numberOfSerialDispatchQueueObservables == 1) return NopDisposable.instance } @@ -263,9 +268,9 @@ extension ObservableConcurrencyTest { var numberOfExecutions = 0 runDispatchQueueSchedulerTests { scheduler in XCTAssert(numberOfSerialDispatchQueueObservables == 0) - return returnElements(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10) - >- observeOn(scheduler) - >- subscribeNext { e in + return sequence(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10) + .observeOn(scheduler) + .subscribeNext { e in XCTAssert(OSAtomicIncrement32(&numberOfConcurrentEvents) == 1) self.sleep(0.1) // should be enough to block the queue, so if it's concurrent, it will fail XCTAssert(OSAtomicDecrement32(&numberOfConcurrentEvents) == 0) @@ -282,8 +287,8 @@ extension ObservableConcurrencyTest { var nEvents = 0 runDispatchQueueSchedulerTests { scheduler in - let observable: Observable = failWith(testError) >- observeOn(scheduler) - return observable >- subscribeError { n in + let observable: Observable = failWith(testError).observeOn(scheduler) + return observable .subscribeError { n in nEvents++ } } @@ -295,8 +300,8 @@ extension ObservableConcurrencyTest { var nEvents = 0 runDispatchQueueSchedulerTests { scheduler in - let observable: Observable = empty() >- observeOn(scheduler) - return observable >- subscribeCompleted { + let observable: Observable = empty().observeOn(scheduler) + return observable .subscribeCompleted { nEvents++ } } @@ -308,8 +313,8 @@ extension ObservableConcurrencyTest { runDispatchQueueSchedulerTests { scheduler in let xs: Observable = never() return xs - >- observeOn(scheduler) - >- subscribeNext { n in + .observeOn(scheduler) + .subscribeNext { n in XCTAssert(false) } } @@ -321,7 +326,7 @@ extension ObservableConcurrencyTest { runDispatchQueueSchedulerMultiplexedTests([ { scheduler in - let subscription = (xs >- observeOn(scheduler)).subscribe(observer) + let subscription = (xs.observeOn(scheduler)).subscribe(observer) XCTAssert(xs.subscriptions == [SubscribedToHotObservable]) sendNext(xs, 0) @@ -364,7 +369,7 @@ extension ObservableConcurrencyTest { runDispatchQueueSchedulerMultiplexedTests([ { scheduler in - let subscription = (xs >- observeOn(scheduler)).subscribe(observer) + let subscription = (xs.observeOn(scheduler)).subscribe(observer) XCTAssert(xs.subscriptions == [SubscribedToHotObservable]) sendCompleted(xs) XCTAssert(xs.subscriptions == [SubscribedToHotObservable]) @@ -387,7 +392,7 @@ extension ObservableConcurrencyTest { runDispatchQueueSchedulerMultiplexedTests([ { scheduler in - let subscription = (xs >- observeOn(scheduler)).subscribe(observer) + let subscription = (xs.observeOn(scheduler)).subscribe(observer) XCTAssert(xs.subscriptions == [SubscribedToHotObservable]) sendNext(xs, 0) @@ -431,7 +436,7 @@ extension ObservableConcurrencyTest { runDispatchQueueSchedulerMultiplexedTests([ { scheduler in - subscription = (xs >- observeOn(scheduler)).subscribe(observer) + subscription = (xs.observeOn(scheduler)).subscribe(observer) XCTAssert(xs.subscriptions == [SubscribedToHotObservable]) sendNext(xs, 0) @@ -475,7 +480,7 @@ class ObservableConcurrentSchedulerConcurrencyTest: ObservableConcurrencyTestBas let scheduler = self.createScheduler() XCTAssert(numberOfSerialDispatchQueueObservables == 0) - let observable = returnElement(0) >- observeOn(scheduler) + let observable = just(0).observeOn(scheduler) self.sleep(0.1) XCTAssert(numberOfSerialDispatchQueueObservables == 0) } @@ -529,8 +534,7 @@ class ObservableConcurrentSchedulerConcurrencyTest: ObservableConcurrencyTestBas _ = scheduler.schedule((), action: concurrent) - stop >- - last + let _ = stop.last XCTAssertEqual(events, ["Started", "Started", "Ended", "Ended"]) } @@ -540,8 +544,8 @@ class ObservableConcurrentSchedulerConcurrencyTest: ObservableConcurrencyTestBas let xs: Observable = never() let subscription = xs - >- observeOn(scheduler) - >- subscribeNext { n in + .observeOn(scheduler) + .subscribeNext { n in XCTAssert(false) } @@ -558,7 +562,7 @@ class ObservableConcurrentSchedulerConcurrencyTest: ObservableConcurrencyTestBas let stop = Variable(0) - let subscription = (xs >- observeOn(scheduler)).subscribe(observer) + let subscription = (xs.observeOn(scheduler)).subscribe(observer) XCTAssert(xs.subscriptions == [SubscribedToHotObservable]) sendNext(xs, 0) @@ -601,7 +605,7 @@ class ObservableConcurrentSchedulerConcurrencyTest: ObservableConcurrencyTestBas let scheduler = createScheduler() - _ = (xs >- observeOn(scheduler)).subscribe(observer) + _ = (xs.observeOn(scheduler)).subscribe(observer) XCTAssert(xs.subscriptions == [SubscribedToHotObservable]) sendCompleted(xs) @@ -622,8 +626,8 @@ class ObservableConcurrentSchedulerConcurrencyTest: ObservableConcurrencyTestBas let scheduler = createScheduler() let res = xs - >- observeOn(scheduler) - >- map { v -> Int in + .observeOn(scheduler) + .map { v -> Int in if v == 0 { self.sleep(0.1) // 100 ms is enough executed = true @@ -657,7 +661,7 @@ class ObservableConcurrentSchedulerConcurrencyTest: ObservableConcurrencyTestBas let scheduler = createScheduler() - let _ = (xs >- observeOn(scheduler)).subscribe(observer) + let _ = (xs.observeOn(scheduler)).subscribe(observer) XCTAssert(xs.subscriptions == [SubscribedToHotObservable]) sendNext(xs, 0) @@ -696,7 +700,7 @@ class ObservableConcurrentSchedulerConcurrencyTest: ObservableConcurrencyTestBas let observer = PrimitiveMockObserver() let scheduler = createScheduler() - let subscription = (xs >- observeOn(scheduler)).subscribe(observer) + let subscription = (xs.observeOn(scheduler)).subscribe(observer) XCTAssert(xs.subscriptions == [SubscribedToHotObservable]) sendNext(xs, 0) @@ -744,7 +748,7 @@ extension ObservableConcurrencyTest { } let res = scheduler.start { - xs >- subscribeOn(scheduler) + xs.subscribeOn(scheduler) } XCTAssertEqual(res.messages, [ @@ -763,7 +767,7 @@ extension ObservableConcurrencyTest { ]) let res = scheduler.start { - xs >- subscribeOn(scheduler) + xs.subscribeOn(scheduler) } XCTAssertEqual(res.messages, [ @@ -783,7 +787,7 @@ extension ObservableConcurrencyTest { ]) let res = scheduler.start { - xs >- subscribeOn(scheduler) + xs.subscribeOn(scheduler) } XCTAssertEqual(res.messages, [ @@ -804,7 +808,7 @@ extension ObservableConcurrencyTest { ]) let res = scheduler.start { - xs >- subscribeOn(scheduler) + xs.subscribeOn(scheduler) } XCTAssertEqual(res.messages, [ diff --git a/RxTests/RxSwiftTests/Tests/Observable+MultipleTest+Zip.swift b/RxTests/RxSwiftTests/Tests/Observable+MultipleTest+Zip.swift index a4346e911..39580b9d0 100644 --- a/RxTests/RxSwiftTests/Tests/Observable+MultipleTest+Zip.swift +++ b/RxTests/RxSwiftTests/Tests/Observable+MultipleTest+Zip.swift @@ -20,12 +20,12 @@ extension ObservableMultipleTest { func testZip_ImmediateSchedule2() { - let v0: Observable = returnElement(1) - let v1: Observable = returnElement(2) + let v0: Observable = just(1) + let v1: Observable = just(2) var result: Int! = nil - let _ = zip(v0, v1) { (a0, a1) in a0 + a1 } >- subscribeNext { result = $0 } + let _ = zip(v0, v1) { (a0, a1) in a0 + a1 } .subscribeNext { (next: Int) -> Void in result = next } XCTAssertEqual(result, 3) } @@ -171,13 +171,13 @@ extension ObservableMultipleTest { func testZip_ImmediateSchedule3() { - let v0: Observable = returnElement(1) - let v1: Observable = returnElement(2) - let v2: Observable = returnElement(3) + let v0: Observable = just(1) + let v1: Observable = just(2) + let v2: Observable = just(3) var result: Int! = nil - let _ = zip(v0, v1, v2) { (a0, a1, a2) in a0 + a1 + a2 } >- subscribeNext { result = $0 } + let _ = zip(v0, v1, v2) { (a0, a1, a2) in a0 + a1 + a2 } .subscribeNext { (next: Int) -> Void in result = next } XCTAssertEqual(result, 6) } @@ -350,14 +350,14 @@ extension ObservableMultipleTest { func testZip_ImmediateSchedule4() { - let v0: Observable = returnElement(1) - let v1: Observable = returnElement(2) - let v2: Observable = returnElement(3) - let v3: Observable = returnElement(4) + let v0: Observable = just(1) + let v1: Observable = just(2) + let v2: Observable = just(3) + let v3: Observable = just(4) var result: Int! = nil - let _ = zip(v0, v1, v2, v3) { (a0, a1, a2, a3) in a0 + a1 + a2 + a3 } >- subscribeNext { result = $0 } + let _ = zip(v0, v1, v2, v3) { (a0, a1, a2, a3) in a0 + a1 + a2 + a3 } .subscribeNext { (next: Int) -> Void in result = next } XCTAssertEqual(result, 10) } @@ -558,15 +558,15 @@ extension ObservableMultipleTest { func testZip_ImmediateSchedule5() { - let v0: Observable = returnElement(1) - let v1: Observable = returnElement(2) - let v2: Observable = returnElement(3) - let v3: Observable = returnElement(4) - let v4: Observable = returnElement(5) + let v0: Observable = just(1) + let v1: Observable = just(2) + let v2: Observable = just(3) + let v3: Observable = just(4) + let v4: Observable = just(5) var result: Int! = nil - let _ = zip(v0, v1, v2, v3, v4) { (a0, a1, a2, a3, a4) in a0 + a1 + a2 + a3 + a4 } >- subscribeNext { result = $0 } + let _ = zip(v0, v1, v2, v3, v4) { (a0, a1, a2, a3, a4) in a0 + a1 + a2 + a3 + a4 } .subscribeNext { (next: Int) -> Void in result = next } XCTAssertEqual(result, 15) } @@ -796,16 +796,16 @@ extension ObservableMultipleTest { func testZip_ImmediateSchedule6() { - let v0: Observable = returnElement(1) - let v1: Observable = returnElement(2) - let v2: Observable = returnElement(3) - let v3: Observable = returnElement(4) - let v4: Observable = returnElement(5) - let v5: Observable = returnElement(6) + let v0: Observable = just(1) + let v1: Observable = just(2) + let v2: Observable = just(3) + let v3: Observable = just(4) + let v4: Observable = just(5) + let v5: Observable = just(6) var result: Int! = nil - let _ = zip(v0, v1, v2, v3, v4, v5) { (a0, a1, a2, a3, a4, a5) in a0 + a1 + a2 + a3 + a4 + a5 } >- subscribeNext { result = $0 } + let _ = zip(v0, v1, v2, v3, v4, v5) { (a0, a1, a2, a3, a4, a5) in a0 + a1 + a2 + a3 + a4 + a5 } .subscribeNext { (next: Int) -> Void in result = next } XCTAssertEqual(result, 21) } @@ -1065,17 +1065,17 @@ extension ObservableMultipleTest { func testZip_ImmediateSchedule7() { - let v0: Observable = returnElement(1) - let v1: Observable = returnElement(2) - let v2: Observable = returnElement(3) - let v3: Observable = returnElement(4) - let v4: Observable = returnElement(5) - let v5: Observable = returnElement(6) - let v6: Observable = returnElement(7) + let v0: Observable = just(1) + let v1: Observable = just(2) + let v2: Observable = just(3) + let v3: Observable = just(4) + let v4: Observable = just(5) + let v5: Observable = just(6) + let v6: Observable = just(7) var result: Int! = nil - let _ = zip(v0, v1, v2, v3, v4, v5, v6) { (a0, a1, a2, a3, a4, a5, a6) in a0 + a1 + a2 + a3 + a4 + a5 + a6 } >- subscribeNext { result = $0 } + let _ = zip(v0, v1, v2, v3, v4, v5, v6) { (a0, a1, a2, a3, a4, a5, a6) in a0 + a1 + a2 + a3 + a4 + a5 + a6 } .subscribeNext { (next: Int) -> Void in result = next } XCTAssertEqual(result, 28) } @@ -1366,18 +1366,18 @@ extension ObservableMultipleTest { func testZip_ImmediateSchedule8() { - let v0: Observable = returnElement(1) - let v1: Observable = returnElement(2) - let v2: Observable = returnElement(3) - let v3: Observable = returnElement(4) - let v4: Observable = returnElement(5) - let v5: Observable = returnElement(6) - let v6: Observable = returnElement(7) - let v7: Observable = returnElement(8) + let v0: Observable = just(1) + let v1: Observable = just(2) + let v2: Observable = just(3) + let v3: Observable = just(4) + let v4: Observable = just(5) + let v5: Observable = just(6) + let v6: Observable = just(7) + let v7: Observable = just(8) var result: Int! = nil - let _ = zip(v0, v1, v2, v3, v4, v5, v6, v7) { (a0, a1, a2, a3, a4, a5, a6, a7) in a0 + a1 + a2 + a3 + a4 + a5 + a6 + a7 } >- subscribeNext { result = $0 } + let _ = zip(v0, v1, v2, v3, v4, v5, v6, v7) { (a0, a1, a2, a3, a4, a5, a6, a7) in a0 + a1 + a2 + a3 + a4 + a5 + a6 + a7 } .subscribeNext { (next: Int) -> Void in result = next } XCTAssertEqual(result, 36) } @@ -1700,19 +1700,19 @@ extension ObservableMultipleTest { func testZip_ImmediateSchedule9() { - let v0: Observable = returnElement(1) - let v1: Observable = returnElement(2) - let v2: Observable = returnElement(3) - let v3: Observable = returnElement(4) - let v4: Observable = returnElement(5) - let v5: Observable = returnElement(6) - let v6: Observable = returnElement(7) - let v7: Observable = returnElement(8) - let v8: Observable = returnElement(9) + let v0: Observable = just(1) + let v1: Observable = just(2) + let v2: Observable = just(3) + let v3: Observable = just(4) + let v4: Observable = just(5) + let v5: Observable = just(6) + let v6: Observable = just(7) + let v7: Observable = just(8) + let v8: Observable = just(9) var result: Int! = nil - let _ = zip(v0, v1, v2, v3, v4, v5, v6, v7, v8) { (a0, a1, a2, a3, a4, a5, a6, a7, a8) in a0 + a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 } >- subscribeNext { result = $0 } + let _ = zip(v0, v1, v2, v3, v4, v5, v6, v7, v8) { (a0, a1, a2, a3, a4, a5, a6, a7, a8) in a0 + a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 } .subscribeNext { (next: Int) -> Void in result = next } XCTAssertEqual(result, 45) } @@ -2068,20 +2068,20 @@ extension ObservableMultipleTest { func testZip_ImmediateSchedule10() { - let v0: Observable = returnElement(1) - let v1: Observable = returnElement(2) - let v2: Observable = returnElement(3) - let v3: Observable = returnElement(4) - let v4: Observable = returnElement(5) - let v5: Observable = returnElement(6) - let v6: Observable = returnElement(7) - let v7: Observable = returnElement(8) - let v8: Observable = returnElement(9) - let v9: Observable = returnElement(10) + let v0: Observable = just(1) + let v1: Observable = just(2) + let v2: Observable = just(3) + let v3: Observable = just(4) + let v4: Observable = just(5) + let v5: Observable = just(6) + let v6: Observable = just(7) + let v7: Observable = just(8) + let v8: Observable = just(9) + let v9: Observable = just(10) var result: Int! = nil - let _ = zip(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) { (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) in a0 + a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 } >- subscribeNext { result = $0 } + let _ = zip(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) { (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) in a0 + a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 } .subscribeNext { (next: Int) -> Void in result = next } XCTAssertEqual(result, 55) } diff --git a/RxTests/RxSwiftTests/Tests/Observable+MultipleTest+Zip.tt b/RxTests/RxSwiftTests/Tests/Observable+MultipleTest+Zip.tt index 2f6aa4b0b..c1962fe6d 100644 --- a/RxTests/RxSwiftTests/Tests/Observable+MultipleTest+Zip.tt +++ b/RxTests/RxSwiftTests/Tests/Observable+MultipleTest+Zip.tt @@ -18,11 +18,12 @@ extension ObservableMultipleTest { func testZip_ImmediateSchedule<%= i %>() { <% for j in 0.. - let v<%= j %>: Observable = returnElement(<%= j + 1 %>)<% } %> + let v<%= j %>: Observable = just(<%= j + 1 %>)<% } %> var result: Int! = nil - let _ = zip(<%= ", ".join(map(0..) { (<%= ", ".join(map(0..) in <%= " + ".join(map(0.. } >- subscribeNext { result = $0 } + let _ = zip(<%= ", ".join(map(0..) { (<%= ", ".join(map(0..) in <%= " + ".join(map(0.. } + .subscribeNext { (Int) -> Void in result = $0 } XCTAssertEqual(result, <%= (i + 1) * i / 2 %>) } diff --git a/RxTests/RxSwiftTests/Tests/Observable+MultipleTest.swift b/RxTests/RxSwiftTests/Tests/Observable+MultipleTest.swift index 7519d6e51..8c1e0f0f1 100644 --- a/RxTests/RxSwiftTests/Tests/Observable+MultipleTest.swift +++ b/RxTests/RxSwiftTests/Tests/Observable+MultipleTest.swift @@ -40,7 +40,7 @@ extension ObservableMultipleTest { var handlerCalled: Int? let res = scheduler.start { - o1 >- onError { e in + o1.catchError { e in handlerCalled = scheduler.clock return o2 } @@ -77,7 +77,7 @@ extension ObservableMultipleTest { var handlerCalled: Int? let res = scheduler.start { - o1 >- catchOrDie { e in + o1.catchErrorOrDie { e in handlerCalled = scheduler.clock return failure(testError1) } @@ -106,7 +106,7 @@ extension ObservableMultipleTest { error(230, testError) ]) - let safeSequence: Observable > = xs >- catchToResult + let safeSequence: Observable > = xs.catchErrorToResult let res = scheduler.start { () -> Observable > in safeSequence } @@ -132,7 +132,7 @@ extension ObservableMultipleTest { completed(230) ]) - let safeSequence: Observable > = xs >- catchToResult + let safeSequence: Observable > = xs.catchErrorToResult let res = scheduler.start { () -> Observable > in safeSequence } @@ -175,7 +175,7 @@ extension ObservableMultipleTest { ]) let res = scheduler.start { - AnySequence([xs1, xs2, xs3]) >- onError + catchError(AnySequence([xs1, xs2, xs3])) } XCTAssertEqual(res.messages, [ @@ -220,7 +220,7 @@ extension ObservableMultipleTest { ]) let res = scheduler.start { - AnySequence([xs1, xs2]) >- onError + catchError(AnySequence([xs1, xs2])) } XCTAssertEqual(res.messages, [ @@ -250,7 +250,7 @@ extension ObservableMultipleTest { ]) let res = scheduler.start { - AnySequence([xs1, xs2]) >- onError + catchError(AnySequence([xs1, xs2])) } XCTAssertEqual(res.messages, [ @@ -278,7 +278,7 @@ extension ObservableMultipleTest { ]) let res = scheduler.start { - AnySequence([xs1, xs2]) >- onError + catchError(AnySequence([xs1, xs2])) } XCTAssertEqual(res.messages, [ @@ -309,7 +309,7 @@ extension ObservableMultipleTest { ]) let res = scheduler.start { - AnySequence([xs1, xs2]) >- onError + catchError(AnySequence([xs1, xs2])) } XCTAssertEqual(res.messages, [ @@ -343,7 +343,7 @@ extension ObservableMultipleTest { ]) let res = scheduler.start { - AnySequence([xs1, xs2]) >- onError + catchError(AnySequence([xs1, xs2])) } XCTAssertEqual(res.messages, [ @@ -376,7 +376,7 @@ extension ObservableMultipleTest { ]) let res = scheduler.start { - AnySequence([xs1, xs2]) >- onError + catchError(AnySequence([xs1, xs2])) } XCTAssertEqual(res.messages, [ @@ -414,7 +414,7 @@ extension ObservableMultipleTest { ]) let res = scheduler.start { - AnySequence([xs1, xs2, xs3]) >- onError + catchError(AnySequence([xs1, xs2, xs3])) } XCTAssertEqual(res.messages, [ @@ -480,7 +480,7 @@ extension ObservableMultipleTest { let xs = scheduler.createHotObservable(xSequence) let res = scheduler.start { - switchLatest(xs) + xs.switchLatest } let correct = [ @@ -563,7 +563,7 @@ extension ObservableMultipleTest { let xs = scheduler.createHotObservable(xSequence) let res = scheduler.start { - switchLatest(xs) + xs.switchLatest } let correct = [ @@ -632,7 +632,7 @@ extension ObservableMultipleTest { let xs = scheduler.createHotObservable(xSequence) let res = scheduler.start { - switchLatest(xs) + xs.switchLatest } let correct = [ @@ -672,7 +672,7 @@ extension ObservableMultipleTest { extension ObservableMultipleTest { func testConcat_DefaultScheduler() { var sum = 0 - concat([returnElement(1), returnElement(2), returnElement(3)]) >- subscribeNext { (e) -> Void in + concat([just(1), just(2), just(3)]).subscribeNext { (e) -> Void in sum += e } @@ -1231,15 +1231,15 @@ extension ObservableMultipleTest { func testMerge_DeadlockSimple() { var nEvents = 0 - let observable = returnElements( - returnElements(0, 1, 2), - returnElements(0, 1, 2), - returnElements(0, 1, 2) - ) >- merge + let observable = sequence( + sequence(0, 1, 2), + sequence(0, 1, 2), + sequence(0, 1, 2) + ).merge - let _ = observable >- subscribeNext { n in + let _ = observable .subscribeNext { n in nEvents++ - } >- scopedDispose + } .scopedDispose XCTAssertEqual(nEvents, 9) } @@ -1247,15 +1247,15 @@ extension ObservableMultipleTest { func testMerge_DeadlockErrorAfterN() { var nEvents = 0 - let observable = returnElements( - returnElements(0, 1, 2), - concat([returnElements(0, 1), failWith(testError)]), - returnElements(0, 1, 2) - ) >- merge + let observable = sequence( + sequence(0, 1, 2), + concat([sequence(0, 1), failWith(testError)]), + sequence(0, 1, 2) + ).merge - let _ = observable >- subscribeError { n in + let _ = observable .subscribeError { n in nEvents++ - } >- scopedDispose + } .scopedDispose XCTAssertEqual(nEvents, 1) } @@ -1263,12 +1263,12 @@ extension ObservableMultipleTest { func testMerge_DeadlockErrorImmediatelly() { var nEvents = 0 - let observable: Observable> = returnElement( + let observable: Observable> = just( failWith(testError) - ) >- merge - let _ = observable >- subscribeError { n in + ).merge + let _ = observable .subscribeError { n in nEvents++ - } >- scopedDispose + } .scopedDispose XCTAssertEqual(nEvents, 1) } @@ -1276,10 +1276,10 @@ extension ObservableMultipleTest { func testMerge_DeadlockEmpty() { var nEvents = 0 - let observable: Observable = empty() >- merge - let _ = observable >- subscribeCompleted { + let observable: Observable = (empty() as Observable>).merge + let _ = observable .subscribeCompleted { nEvents++ - } >- scopedDispose + } .scopedDispose XCTAssertEqual(nEvents, 1) } @@ -1287,10 +1287,10 @@ extension ObservableMultipleTest { func testMerge_DeadlockFirstEmpty() { var nEvents = 0 - let observable: Observable = returnElement(empty()) >- merge - let _ = observable >- subscribeCompleted { n in + let observable: Observable = just(empty()).merge + let _ = observable .subscribeCompleted { n in nEvents++ - } >- scopedDispose + } .scopedDispose XCTAssertEqual(nEvents, 1) } @@ -1298,15 +1298,15 @@ extension ObservableMultipleTest { func testMergeConcurrent_DeadlockSimple() { var nEvents = 0 - let observable = returnElements( - returnElements(0, 1, 2), - returnElements(0, 1, 2), - returnElements(0, 1, 2) - ) >- merge(maxConcurrent: 1) + let observable = sequence( + sequence(0, 1, 2), + sequence(0, 1, 2), + sequence(0, 1, 2) + ).merge(maxConcurrent: 1) - let _ = observable >- subscribeNext { n in + let _ = observable .subscribeNext { n in nEvents++ - } >- scopedDispose + } .scopedDispose XCTAssertEqual(nEvents, 9) } @@ -1314,15 +1314,15 @@ extension ObservableMultipleTest { func testMergeConcurrent_DeadlockErrorAfterN() { var nEvents = 0 - let observable = returnElements( - returnElements(0, 1, 2), - concat([returnElements(0, 1), failWith(testError)]), - returnElements(0, 1, 2) - ) >- merge(maxConcurrent: 1) + let observable = sequence( + sequence(0, 1, 2), + concat([sequence(0, 1), failWith(testError)]), + sequence(0, 1, 2) + ).merge(maxConcurrent: 1) - let _ = observable >- subscribeError { n in + let _ = observable .subscribeError { n in nEvents++ - } >- scopedDispose + } .scopedDispose XCTAssertEqual(nEvents, 1) } @@ -1330,12 +1330,12 @@ extension ObservableMultipleTest { func testMergeConcurrent_DeadlockErrorImmediatelly() { var nEvents = 0 - let observable: Observable> = returnElement( + let observable: Observable> = just( failWith(testError) - ) >- merge(maxConcurrent: 1) - let _ = observable >- subscribeError { n in + ).merge(maxConcurrent: 1) + let _ = observable .subscribeError { n in nEvents++ - } >- scopedDispose + } .scopedDispose XCTAssertEqual(nEvents, 1) } @@ -1343,10 +1343,10 @@ extension ObservableMultipleTest { func testMergeConcurrent_DeadlockEmpty() { var nEvents = 0 - let observable: Observable = empty() >- merge(maxConcurrent: 1) - let _ = observable >- subscribeCompleted { + let observable: Observable = (empty() as Observable>).merge(maxConcurrent: 1) + let _ = observable .subscribeCompleted { nEvents++ - } >- scopedDispose + } .scopedDispose XCTAssertEqual(nEvents, 1) } @@ -1354,10 +1354,10 @@ extension ObservableMultipleTest { func testMergeConcurrent_DeadlockFirstEmpty() { var nEvents = 0 - let observable: Observable = returnElement(empty()) >- merge(maxConcurrent: 1) - let _ = observable >- subscribeCompleted { n in + let observable: Observable = just(empty()).merge(maxConcurrent: 1) + let _ = observable .subscribeCompleted { n in nEvents++ - } >- scopedDispose + } .scopedDispose XCTAssertEqual(nEvents, 1) } @@ -1400,7 +1400,7 @@ extension ObservableMultipleTest { ]) let _ = scheduler.start { - xs >- merge + xs.merge } let _ = [ @@ -1468,7 +1468,7 @@ extension ObservableMultipleTest { ]) let _ = scheduler.start { - xs >- merge + xs.merge } let _ = [ @@ -1539,7 +1539,7 @@ extension ObservableMultipleTest { ]) let _ = scheduler.start { - xs >- merge + xs.merge } let _ = [ @@ -1598,7 +1598,7 @@ extension ObservableMultipleTest { ]) let _ = scheduler.start { - xs >- merge + xs.merge } let _ = [ @@ -1664,7 +1664,7 @@ extension ObservableMultipleTest { ]) let _ = scheduler.start { - xs >- merge(maxConcurrent: 2) + xs.merge(maxConcurrent: 2) } let _ = [ @@ -1740,7 +1740,7 @@ extension ObservableMultipleTest { ]) let _ = scheduler.start { - xs >- merge(maxConcurrent: 2) + xs.merge(maxConcurrent: 2) } let _ = [ @@ -1816,7 +1816,7 @@ extension ObservableMultipleTest { ]) let _ = scheduler.start { - xs >- merge(maxConcurrent: 3) + xs.merge(maxConcurrent: 3) } let _ = [ @@ -1892,7 +1892,7 @@ extension ObservableMultipleTest { ]) let _ = scheduler.start { - xs >- merge(maxConcurrent: 3) + xs.merge(maxConcurrent: 3) } let _ = [ @@ -1968,7 +1968,7 @@ extension ObservableMultipleTest { ]) let _ = scheduler.start(450) { - xs >- merge(maxConcurrent: 2) + xs.merge(maxConcurrent: 2) } let _ = [ @@ -2039,7 +2039,7 @@ extension ObservableMultipleTest { ]) let _ = scheduler.start { - xs >- merge(maxConcurrent: 2) + xs.merge(maxConcurrent: 2) } let _ = [ @@ -2110,7 +2110,7 @@ extension ObservableMultipleTest { ]) let _ = scheduler.start { - xs >- merge(maxConcurrent: 2) + xs.merge(maxConcurrent: 2) } let _ = [ @@ -2153,10 +2153,10 @@ extension ObservableMultipleTest { func testCombineLatest_DeadlockSimple() { var nEvents = 0 - let observable = combineLatest(returnElements(0, 1, 2), returnElements(0, 1, 2)) { $0 + $1 } - let _ = observable >- subscribeNext { n in + let observable = combineLatest(sequence(0, 1, 2), sequence(0, 1, 2)) { $0 + $1 } + let _ = observable .subscribeNext { n in nEvents++ - } >- scopedDispose + } .scopedDispose XCTAssertEqual(nEvents, 3) } @@ -2165,12 +2165,12 @@ extension ObservableMultipleTest { var nEvents = 0 let observable = combineLatest( - concat([returnElements(0, 1, 2), failWith(testError)]), - returnElements(0, 1, 2) + concat([sequence(0, 1, 2), failWith(testError)]), + sequence(0, 1, 2) ) { $0 + $1 } - let _ = observable >- subscribeError { n in + let _ = observable .subscribeError { n in nEvents++ - } >- scopedDispose + } .scopedDispose XCTAssertEqual(nEvents, 1) } @@ -2180,11 +2180,11 @@ extension ObservableMultipleTest { let observable = combineLatest( failWith(testError), - returnElements(0, 1, 2) + sequence(0, 1, 2) ) { $0 + $1 } - let _ = observable >- subscribeError { n in + let _ = observable .subscribeError { n in nEvents++ - } >- scopedDispose + } .scopedDispose XCTAssertEqual(nEvents, 1) } @@ -2195,11 +2195,11 @@ extension ObservableMultipleTest { let observable = combineLatest( empty(), - returnElements(0, 1, 2) + sequence(0, 1, 2) ) { $0 + $1 } - let _ = observable >- subscribeCompleted { + let _ = observable .subscribeCompleted { nEvents++ - } >- scopedDispose + } .scopedDispose XCTAssertEqual(nEvents, 1) } @@ -2227,7 +2227,7 @@ extension ObservableMultipleTest { ]) let res = scheduler.start { - l >- takeUntil(r) + l .takeUntil(r) } XCTAssertEqual(res.messages, [ @@ -2263,7 +2263,7 @@ extension ObservableMultipleTest { ]) let res = scheduler.start { - l >- takeUntil(r) + l .takeUntil(r) } XCTAssertEqual(res.messages, [ @@ -2299,7 +2299,7 @@ extension ObservableMultipleTest { ]) let res = scheduler.start { - l >- takeUntil(r) + l .takeUntil(r) } XCTAssertEqual(res.messages, [ @@ -2336,7 +2336,7 @@ extension ObservableMultipleTest { ]) let res = scheduler.start { - l >- takeUntil(r) + l .takeUntil(r) } XCTAssertEqual(res.messages, [ @@ -2370,7 +2370,7 @@ extension ObservableMultipleTest { ]) let res = scheduler.start { - l >- takeUntil(r) + l .takeUntil(r) } XCTAssertEqual(res.messages, [ @@ -2399,7 +2399,7 @@ extension ObservableMultipleTest { ]) let res = scheduler.start { - l >- takeUntil(r) + l .takeUntil(r) } XCTAssertEqual(res.messages, [ @@ -2428,7 +2428,7 @@ extension ObservableMultipleTest { ]) let res = scheduler.start { - l >- takeUntil(r) + l .takeUntil(r) } XCTAssertEqual(res.messages, [ @@ -2455,7 +2455,7 @@ extension ObservableMultipleTest { ]) let res = scheduler.start { - l >- takeUntil(r) + l .takeUntil(r) } XCTAssertEqual(res.messages, [ @@ -2486,7 +2486,7 @@ extension ObservableMultipleTest { ]) let res = scheduler.start { - l >- takeUntil(r) + l .takeUntil(r) } XCTAssertEqual(res.messages, [ @@ -2520,7 +2520,7 @@ extension ObservableMultipleTest { var sourceNotDisposed = false let res = scheduler.start { - l >- `do` { _ in sourceNotDisposed = true } >- takeUntil(r) + l .`do` { _ in sourceNotDisposed = true } .takeUntil(r) } XCTAssertEqual(res.messages, [ @@ -2548,7 +2548,7 @@ extension ObservableMultipleTest { var sourceNotDisposed = false let res = scheduler.start { - l >- takeUntil(r >- `do` { _ in sourceNotDisposed = true }) + l .takeUntil(r .`do` { _ in sourceNotDisposed = true }) } XCTAssertEqual(res.messages, [ @@ -2575,7 +2575,7 @@ extension ObservableMultipleTest { let sourceNotDisposed = false let res = scheduler.start { - l >- takeUntil(r) + l .takeUntil(r) } XCTAssertEqual(res.messages, [ diff --git a/RxTests/RxSwiftTests/Tests/Observable+SingleTest.swift b/RxTests/RxSwiftTests/Tests/Observable+SingleTest.swift index 1aa6f8892..9b0dcf11d 100644 --- a/RxTests/RxSwiftTests/Tests/Observable+SingleTest.swift +++ b/RxTests/RxSwiftTests/Tests/Observable+SingleTest.swift @@ -31,7 +31,7 @@ extension ObservableSingleTest { completed(250) ]) - let ys = asObservable(xs) + let ys = xs.asObservable() XCTAssert(xs !== ys) @@ -49,7 +49,7 @@ extension ObservableSingleTest { func testAsObservable_hides() { let xs : Observable = empty() - let res = asObservable(xs) + let res = xs.asObservable() XCTAssertTrue(res !== xs) } @@ -83,7 +83,7 @@ extension ObservableSingleTest { completed(250) ]) - let res = scheduler.start { xs >- distinctUntilChanged { $0 } } + let res = scheduler.start { xs.distinctUntilChanged { $0 } } let correctMessages = [ next(210, 2), @@ -117,7 +117,7 @@ extension ObservableSingleTest { ]) - let res = scheduler.start { xs >- distinctUntilChanged { $0 } } + let res = scheduler.start { xs.distinctUntilChanged { $0 } } let correctMessages = [ next(210, 2), @@ -148,7 +148,7 @@ extension ObservableSingleTest { completed(250) ]) - let res = scheduler.start { xs >- distinctUntilChanged { l, r in true } } + let res = scheduler.start { xs.distinctUntilChanged { l, r in true } } let correctMessages = [ next(210, 2), @@ -182,7 +182,7 @@ extension ObservableSingleTest { var i = 0 var sum = 2 + 3 + 4 + 5 - let res = scheduler.start { xs >- `do` { e in + let res = scheduler.start { xs.`do` { e in switch e { case .Next(let _): i++ @@ -225,7 +225,7 @@ extension ObservableSingleTest { ]) var i = 0 - let res = scheduler.start { xs >- `do` { e in + let res = scheduler.start { xs.`do` { e in switch e { case .Next(_): i++ @@ -267,7 +267,7 @@ extension ObservableSingleTest { var i = 0 var sum = 2 + 3 + 4 + 5 var completedEvaluation = false - let res = scheduler.start { xs >- `do` { e in + let res = scheduler.start { xs.`do` { e in switch e { case .Next(let value): i++ @@ -309,7 +309,7 @@ extension ObservableSingleTest { var i = 0 var completedEvaluation = false - let res = scheduler.start { xs >- `do` { e in + let res = scheduler.start { xs.`do` { e in switch e { case .Next(_): i++ @@ -349,7 +349,7 @@ extension ObservableSingleTest { var i = 0 var sum = 2 + 3 + 4 + 5 var sawError = false - let res = scheduler.start { xs >- `do` { e in + let res = scheduler.start { xs.`do` { e in switch e { case .Next(let value): i++ @@ -396,7 +396,7 @@ extension ObservableSingleTest { var i = 0 var sum = 2 + 3 + 4 + 5 var sawError = false - let res = scheduler.start { xs >- `do` { e in + let res = scheduler.start { xs.`do` { e in switch e { case .Next(let value): i++ @@ -444,7 +444,7 @@ extension ObservableSingleTest { ]) let res = scheduler.start { - xs >- retry + xs.retry } XCTAssertEqual(res.messages, [ @@ -469,7 +469,7 @@ extension ObservableSingleTest { ]) let res = scheduler.start { - xs >- retry + xs.retry } XCTAssertEqual(res.messages, [ @@ -494,7 +494,7 @@ extension ObservableSingleTest { ]) let res = scheduler.start(1100) { - xs >- retry + xs.retry } XCTAssertEqual(res.messages, [ @@ -529,7 +529,7 @@ extension ObservableSingleTest { ]) let res = scheduler.start { - xs >- retry(3) + xs.retry(3) } XCTAssertEqual(res.messages, [ @@ -563,7 +563,7 @@ extension ObservableSingleTest { ]) let res = scheduler.start(231) { - xs >- retry(3) + xs.retry(3) } XCTAssertEqual(res.messages, [ @@ -591,7 +591,7 @@ extension ObservableSingleTest { ]) let res = scheduler.start(231) { - xs >- retry(3) + xs.retry(3) } XCTAssertEqual(res.messages, [ @@ -619,7 +619,7 @@ extension ObservableSingleTest { ]) let res = scheduler.start { - xs >- retry(3) + xs.retry(3) } XCTAssertEqual(res.messages, [ @@ -648,7 +648,7 @@ extension ObservableSingleTest { let seed = 42 let res = scheduler.start { - xs >- scan(seed) { $0 + $1 } + xs.scan(seed) { $0 + $1 } } XCTAssertEqual(res.messages, [ @@ -670,7 +670,7 @@ extension ObservableSingleTest { let seed = 42 let res = scheduler.start { - xs >- scan(seed) { $0 + $1 } + xs.scan(seed) { $0 + $1 } } XCTAssertEqual(res.messages, [ @@ -694,7 +694,7 @@ extension ObservableSingleTest { let seed = 42 let res = scheduler.start { - xs >- scan(seed) { $0 + $1 } + xs.scan(seed) { $0 + $1 } } XCTAssertEqual(res.messages, [ @@ -718,7 +718,7 @@ extension ObservableSingleTest { let seed = 42 let res = scheduler.start { - xs >- scan(seed) { $0 + $1 } + xs.scan(seed) { $0 + $1 } } XCTAssertEqual(res.messages, [ @@ -745,7 +745,7 @@ extension ObservableSingleTest { let seed = 42 let res = scheduler.start { - xs >- scan(seed) { $0 + $1 } + xs.scan(seed) { $0 + $1 } } let messages: [Recorded] = [ @@ -778,7 +778,7 @@ extension ObservableSingleTest { let seed = 42 let res = scheduler.start { - xs >- scanOrDie(seed) { (a, e) in + xs.scanOrDie(seed) { (a, e) in if e == 4 { return failure(testError) } else { diff --git a/RxTests/RxSwiftTests/Tests/Observable+StandardSequenceOperatorsTest.swift b/RxTests/RxSwiftTests/Tests/Observable+StandardSequenceOperatorsTest.swift index 031491c77..c06f3f912 100644 --- a/RxTests/RxSwiftTests/Tests/Observable+StandardSequenceOperatorsTest.swift +++ b/RxTests/RxSwiftTests/Tests/Observable+StandardSequenceOperatorsTest.swift @@ -63,7 +63,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { () -> Observable in - return xs >- filter { (num: Int) -> Bool in + return xs.filter { (num: Int) -> Bool in invoked++; return isPrime(num); } @@ -105,7 +105,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { () -> Observable in - return xs >- filter { (num: Int) -> Bool in + return xs.filter { (num: Int) -> Bool in invoked++ return true } @@ -152,7 +152,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { () -> Observable in - return xs >- filter { (num: Int) -> Bool in + return xs.filter { (num: Int) -> Bool in invoked++ return false } @@ -190,7 +190,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start(400) { () -> Observable in - return xs >- filter { (num: Int) -> Bool in + return xs.filter { (num: Int) -> Bool in invoked++; return isPrime(num) } @@ -234,7 +234,7 @@ extension ObservableStandardSequenceOperators { var invoked = 0 let res = scheduler.start { () -> Observable in - return xs >- takeWhile { (num: Int) -> Bool in + return xs.takeWhile { (num: Int) -> Bool in invoked++; return isPrime(num) } @@ -276,7 +276,7 @@ extension ObservableStandardSequenceOperators { var invoked = 0 let res = scheduler.start { () -> Observable in - return xs >- takeWhile { (num: Int) -> Bool in + return xs.takeWhile { (num: Int) -> Bool in invoked++; return isPrime(num) } @@ -320,7 +320,7 @@ extension ObservableStandardSequenceOperators { var invoked = 0 let res = scheduler.start { () -> Observable in - return xs >- takeWhile { (num: Int) -> Bool in + return xs.takeWhile { (num: Int) -> Bool in invoked++; return isPrime(num) } @@ -360,7 +360,7 @@ extension ObservableStandardSequenceOperators { var invoked = 0 let res = scheduler.start { () -> Observable in - return xs >- takeWhile { (num: Int) -> Bool in + return xs.takeWhile { (num: Int) -> Bool in invoked++; return isPrime(num) } @@ -403,7 +403,7 @@ extension ObservableStandardSequenceOperators { var invoked = 0 let res = scheduler.start(300) { () -> Observable in - return xs >- takeWhile { (num: Int) -> Bool in + return xs.takeWhile { (num: Int) -> Bool in invoked++; return isPrime(num) } @@ -443,7 +443,7 @@ extension ObservableStandardSequenceOperators { var invoked = 0 let res = scheduler.start(400) { () -> Observable in - return xs >- takeWhile { (num: Int) -> Bool in + return xs.takeWhile { (num: Int) -> Bool in invoked++; return isPrime(num) } @@ -487,7 +487,7 @@ extension ObservableStandardSequenceOperators { var invoked = 0 let res = scheduler.start(300) { () -> Observable in - return xs >- takeWhile { (num: Int) -> Bool in + return xs.takeWhile { (num: Int) -> Bool in invoked++; return isPrime(num) } @@ -526,7 +526,7 @@ extension ObservableStandardSequenceOperators { _ = 0 let res = scheduler.start { () -> Observable in - return xs >- takeWhile { (num: Int, index) -> Bool in + return xs.takeWhile { (num: Int, index) -> Bool in return index < 5 } } @@ -564,7 +564,7 @@ extension ObservableStandardSequenceOperators { var invoked = 0 let res = scheduler.start { () -> Observable in - return xs >- takeWhile { (num: Int, index) -> Bool in + return xs.takeWhile { (num: Int, index) -> Bool in return index >= 0 } } @@ -604,7 +604,7 @@ extension ObservableStandardSequenceOperators { var invoked = 0 let res = scheduler.start { () -> Observable in - return xs >- takeWhile { (num: Int, index) -> Bool in + return xs.takeWhile { (num: Int, index) -> Bool in return index >= 0 } } @@ -636,7 +636,7 @@ extension ObservableStandardSequenceOperators { next(150, 1), ]) - let res = scheduler.start { xs >- map { $0 * 2 } } + let res = scheduler.start { xs.map { $0 * 2 } } let correctMessages: [Recorded] = [ ] @@ -657,7 +657,7 @@ extension ObservableStandardSequenceOperators { completed(300) ]) - let res = scheduler.start { xs >- map { $0 * 2 } } + let res = scheduler.start { xs.map { $0 * 2 } } let correctMessages: [Recorded] = [ completed(300) @@ -683,7 +683,7 @@ extension ObservableStandardSequenceOperators { completed(300) ]) - let res = scheduler.start { xs >- map { $0 * 2 } } + let res = scheduler.start { xs.map { $0 * 2 } } let correctMessages: [Recorded] = [ next(210, 0 * 2), @@ -713,7 +713,7 @@ extension ObservableStandardSequenceOperators { error(300, testError) ]) - let res = scheduler.start { xs >- map { $0 * 2 } } + let res = scheduler.start { xs.map { $0 * 2 } } let correctMessages: [Recorded] = [ next(210, 0 * 2), @@ -743,7 +743,7 @@ extension ObservableStandardSequenceOperators { error(300, testError) ]) - let res = scheduler.start(290) { xs >- map { $0 * 2 } } + let res = scheduler.start(290) { xs.map { $0 * 2 } } let correctMessages: [Recorded] = [ next(210, 0 * 2), @@ -772,7 +772,7 @@ extension ObservableStandardSequenceOperators { error(300, testError) ]) - let res = scheduler.start { xs >- mapOrDie { $0 < 2 ? success($0 * 2) : failure(testError) } } + let res = scheduler.start { xs.mapOrDie { $0 < 2 ? success($0 * 2) : failure(testError) } } let correctMessages: [Recorded] = [ next(210, 0 * 2), @@ -795,7 +795,7 @@ extension ObservableStandardSequenceOperators { next(150, 1), ]) - let res = scheduler.start { xs >- mapWithIndex { ($0 + $1) * 2 } } + let res = scheduler.start { xs.mapWithIndex { ($0 + $1) * 2 } } let correctMessages: [Recorded] = [ ] @@ -816,7 +816,7 @@ extension ObservableStandardSequenceOperators { completed(300) ]) - let res = scheduler.start { xs >- mapWithIndex { ($0 + $1) * 2 } } + let res = scheduler.start { xs.mapWithIndex { ($0 + $1) * 2 } } let correctMessages: [Recorded] = [ completed(300) @@ -842,7 +842,7 @@ extension ObservableStandardSequenceOperators { completed(300) ]) - let res = scheduler.start { xs >- mapWithIndex { ($0 + $1) * 2 } } + let res = scheduler.start { xs.mapWithIndex { ($0 + $1) * 2 } } let correctMessages: [Recorded] = [ next(210, (5 + 0) * 2), @@ -872,7 +872,7 @@ extension ObservableStandardSequenceOperators { error(300, testError) ]) - let res = scheduler.start { xs >- mapWithIndex { ($0 + $1) * 2 } } + let res = scheduler.start { xs.mapWithIndex { ($0 + $1) * 2 } } let correctMessages: [Recorded] = [ next(210, (5 + 0) * 2), @@ -902,7 +902,7 @@ extension ObservableStandardSequenceOperators { error(300, testError) ]) - let res = scheduler.start(290) { xs >- mapWithIndex { ($0 + $1) * 2 } } + let res = scheduler.start(290) { xs.mapWithIndex { ($0 + $1) * 2 } } let correctMessages: [Recorded] = [ next(210, (5 + 0) * 2), @@ -931,7 +931,7 @@ extension ObservableStandardSequenceOperators { error(300, testError) ]) - let res = scheduler.start { xs >- mapWithIndexOrDie { $0 < 7 ? success(($0 + $1) * 2) : failure(testError) } } + let res = scheduler.start { xs.mapWithIndexOrDie { $0 < 7 ? success(($0 + $1) * 2) : failure(testError) } } let correctMessages: [Recorded] = [ next(210, (5 + 0) * 2), @@ -949,20 +949,20 @@ extension ObservableStandardSequenceOperators { func testMap_DisposeOnCompleted() { just("A") - >- map { a in + .map { a in return a } - >- subscribeNext { _ in + .subscribeNext { _ in } } func testMap1_DisposeOnCompleted() { just("A") - >- mapWithIndex { (a, i) in + .mapWithIndex { (a, i) in return a } - >- subscribeNext { _ in + .subscribeNext { _ in } } @@ -1014,7 +1014,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { - xs >- flatMap { $0 } + xs.flatMap { $0 } } XCTAssertEqual(res.messages, [ @@ -1102,7 +1102,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { - xs >- flatMap { $0 } + xs.flatMap { $0 } } XCTAssertEqual(res.messages, [ @@ -1189,7 +1189,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { - xs >- flatMap { $0 } + xs.flatMap { $0 } } XCTAssertEqual(res.messages, [ @@ -1276,7 +1276,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { - xs >- flatMap { $0 } + xs.flatMap { $0 } } XCTAssertEqual(res.messages, [ @@ -1363,7 +1363,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { - xs >- flatMap { $0 } + xs.flatMap { $0 } } XCTAssertEqual(res.messages, [ @@ -1447,7 +1447,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start(700) { - xs >- flatMap { $0 } + xs.flatMap { $0 } } XCTAssertEqual(res.messages, [ @@ -1529,7 +1529,7 @@ extension ObservableStandardSequenceOperators { var invoked = 0 let res = scheduler.start { - return xs >- flatMapOrDie { (x: ColdObservable) -> RxResult> in + return xs.flatMapOrDie { (x: ColdObservable) -> RxResult> in invoked++ if invoked == 3 { return failure(testError) @@ -1581,8 +1581,8 @@ extension ObservableStandardSequenceOperators { var invoked = 0 let res = scheduler.start { - xs >- flatMap { (x) in - return interval(10, scheduler) >- map { _ in x } >- take(x) + xs.flatMap { (x) in + return interval(10, scheduler).map { _ in x } .take(x) } } @@ -1620,7 +1620,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { - xs >- flatMapWithIndex { (x, i) in + xs.flatMapWithIndex { (x, i) in return just(ElementIndexPair(x, i)) } } @@ -1682,7 +1682,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { - xs >- flatMapWithIndex { x, _ in x } + xs.flatMapWithIndex { x, _ in x } } XCTAssertEqual(res.messages, [ @@ -1770,7 +1770,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { - xs >- flatMapWithIndex { x, _ in x } + xs.flatMapWithIndex { x, _ in x } } XCTAssertEqual(res.messages, [ @@ -1858,7 +1858,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { - xs >- flatMapWithIndex { x, _ in x } + xs.flatMapWithIndex { x, _ in x } } XCTAssertEqual(res.messages, [ @@ -1946,7 +1946,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { - xs >- flatMapWithIndex { x, _ in x } + xs.flatMapWithIndex { x, _ in x } } XCTAssertEqual(res.messages, [ @@ -2033,7 +2033,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { - xs >- flatMapWithIndex { x, _ in x } + xs.flatMapWithIndex { x, _ in x } } XCTAssertEqual(res.messages, [ @@ -2117,7 +2117,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start(700) { - xs >- flatMapWithIndex { x, _ in x } + xs.flatMapWithIndex { x, _ in x } } XCTAssertEqual(res.messages, [ @@ -2199,7 +2199,7 @@ extension ObservableStandardSequenceOperators { var invoked = 0 let res = scheduler.start { - return xs >- flatMapWithIndexOrDie { (x: ColdObservable, _: Int) -> RxResult> in + return xs.flatMapWithIndexOrDie { (x: ColdObservable, _: Int) -> RxResult> in invoked++ if invoked == 3 { return failure(testError) @@ -2251,8 +2251,8 @@ extension ObservableStandardSequenceOperators { var invoked = 0 let res = scheduler.start { - xs >- flatMapWithIndex { (x, _) in - return interval(10, scheduler) >- map { _ in x } >- take(x) + xs.flatMapWithIndex { (x, _) in + return interval(10, scheduler).map { _ in x } .take(x) } } @@ -2310,7 +2310,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { - xs >- take(20) + xs.take(20) } XCTAssertEqual(res.messages, [ @@ -2366,7 +2366,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { - xs >- take(17) + xs.take(17) } XCTAssertEqual(res.messages, [ @@ -2422,7 +2422,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { - xs >- take(10) + xs.take(10) } XCTAssertEqual(res.messages, [ @@ -2471,7 +2471,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { - xs >- take(20) + xs.take(20) } XCTAssertEqual(res.messages, [ @@ -2527,7 +2527,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { - xs >- take(17) + xs.take(17) } XCTAssertEqual(res.messages, [ @@ -2583,7 +2583,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { - xs >- take(3) + xs.take(3) } XCTAssertEqual(res.messages, [ @@ -2625,7 +2625,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start(250) { - xs >- take(3) + xs.take(3) } XCTAssertEqual(res.messages, [ @@ -2665,7 +2665,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start(400) { - xs >- take(3) + xs.take(3) } XCTAssertEqual(res.messages, [ @@ -2691,7 +2691,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { - xs >- take(0) + xs.take(0) } XCTAssertEqual(res.messages, [ @@ -2720,7 +2720,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { - xs >- take(3) + xs.take(3) } XCTAssertEqual(res.messages, [ @@ -2738,7 +2738,7 @@ extension ObservableStandardSequenceOperators { func testTake_DecrementCountsFirst() { let k = BehaviorSubject(value: false) - k >- take(1) >- subscribeNext { n in + k .take(1).subscribeNext { n in sendNext(k, !n) } } @@ -2773,7 +2773,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { - xs >- skip(20) + xs.skip(20) } XCTAssertEqual(res.messages, [ @@ -2813,7 +2813,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { - xs >- skip(17) + xs.skip(17) } XCTAssertEqual(res.messages, [ @@ -2852,7 +2852,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { - xs >- skip(10) + xs.skip(10) } XCTAssertEqual(res.messages, [ @@ -2898,7 +2898,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { - xs >- skip(0) + xs.skip(0) } XCTAssertEqual(res.messages, [ @@ -2954,7 +2954,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { - xs >- skip(20) + xs.skip(20) } XCTAssertEqual(res.messages, [ @@ -2993,7 +2993,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { - xs >- skip(17) + xs.skip(17) } XCTAssertEqual(res.messages, [ @@ -3032,7 +3032,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start { - xs >- skip(3) + xs.skip(3) } XCTAssertEqual(res.messages, [ @@ -3084,7 +3084,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start(250) { - xs >- skip(3) + xs.skip(3) } XCTAssertEqual(res.messages, [ @@ -3121,7 +3121,7 @@ extension ObservableStandardSequenceOperators { ]) let res = scheduler.start(400) { - xs >- skip(3) + xs.skip(3) } XCTAssertEqual(res.messages, [ diff --git a/RxTests/RxSwiftTests/Tests/Observable+TimeTest.swift b/RxTests/RxSwiftTests/Tests/Observable+TimeTest.swift index 036ed0885..c2e026d27 100644 --- a/RxTests/RxSwiftTests/Tests/Observable+TimeTest.swift +++ b/RxTests/RxSwiftTests/Tests/Observable+TimeTest.swift @@ -42,7 +42,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- throttle(20, scheduler) + xs.throttle(20, scheduler) } let correct = [ @@ -75,7 +75,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- throttle(20, scheduler) + xs.throttle(20, scheduler) } let correct = [ @@ -111,7 +111,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- throttle(40, scheduler) + xs.throttle(40, scheduler) } let correct = [ @@ -144,7 +144,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- throttle(40, scheduler) + xs.throttle(40, scheduler) } let correct: [Recorded] = [ @@ -169,7 +169,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- throttle(10, scheduler) + xs.throttle(10, scheduler) } let correct: [Recorded] = [ @@ -194,7 +194,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- throttle(10, scheduler) + xs.throttle(10, scheduler) } let correct: [Recorded] = [ @@ -218,7 +218,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- throttle(10, scheduler) + xs.throttle(10, scheduler) } let correct: [Recorded] = [ @@ -246,7 +246,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- throttle(20, scheduler) + xs.throttle(20, scheduler) } let correct: [Recorded] = [ @@ -270,9 +270,9 @@ extension ObservableTimeTest { let start = NSDate() - let a = concat(from([just(0), never()])) - >- throttle(2, scheduler) - >- first + let a = from([just(0), never()]).concat + .throttle(2.0, scheduler) + .first let end = NSDate() @@ -306,7 +306,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- sample(ys) + xs.sample(ys) } let correct: [Recorded] = [ @@ -348,7 +348,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- sample(ys) + xs.sample(ys) } let correct: [Recorded] = [ @@ -392,7 +392,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- sample(ys) + xs.sample(ys) } let correct: [Recorded] = [ @@ -434,7 +434,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- sample(ys) + xs.sample(ys) } let correct: [Recorded] = [ @@ -477,7 +477,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- sample(ys) + xs.sample(ys) } let correct: [Recorded] = [ @@ -519,7 +519,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- sampleLatest(ys) + xs.sampleLatest(ys) } let correct: [Recorded] = [ @@ -562,7 +562,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- sampleLatest(ys) + xs.sampleLatest(ys) } let correct: [Recorded] = [ @@ -608,7 +608,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- sampleLatest(ys) + xs.sampleLatest(ys) } let correct: [Recorded] = [ @@ -651,7 +651,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- sampleLatest(ys) + xs.sampleLatest(ys) } let correct: [Recorded] = [ @@ -695,7 +695,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- sampleLatest(ys) + xs.sampleLatest(ys) } let correct: [Recorded] = [ @@ -772,12 +772,12 @@ extension ObservableTimeTest { OSSpinLockLock(&lock) - let d = interval(0, scheduler) >- takeWhile { $0 < 10 } >- subscribe( { t in + let d = interval(0, scheduler).takeWhile { $0 < 10 } .subscribe( { t in sendNext(observer, t) }, error: { _ in }, completed: { OSSpinLockUnlock(&lock) - }) >- scopedDispose + }).scopedDispose OSSpinLockLock(&lock) OSSpinLockUnlock(&lock) @@ -814,8 +814,8 @@ extension ObservableTimeTest { let start = NSDate() let a = interval(1, scheduler) - >- take(2) - >- toArray + .take(2) + .toArray() let end = NSDate() @@ -838,7 +838,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- take(0, scheduler) + xs.take(0, scheduler) } XCTAssertEqual(res.messages, [ @@ -861,7 +861,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- take(25, scheduler) + xs.take(25, scheduler) } XCTAssertEqual(res.messages, [ @@ -885,7 +885,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- take(50, scheduler) + xs.take(50, scheduler) } XCTAssertEqual(res.messages, [ @@ -908,7 +908,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- take(50, scheduler) + xs.take(50, scheduler) } XCTAssertEqual(res.messages, [ @@ -928,7 +928,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- take(50, scheduler) + xs.take(50, scheduler) } XCTAssertEqual(res.messages, [ @@ -954,7 +954,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- take(35, scheduler) + xs.take(35, scheduler) } XCTAssertEqual(res.messages, [ @@ -983,7 +983,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- take(35, scheduler) + xs.take(35, scheduler) } XCTAssertEqual(res.messages, [ @@ -1014,7 +1014,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- delaySubscription(30, scheduler) + xs.delaySubscription(30, scheduler) } XCTAssertEqual(res.messages, [ @@ -1038,7 +1038,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- delaySubscription(30, scheduler) + xs.delaySubscription(30, scheduler) } XCTAssertEqual(res.messages, [ @@ -1062,7 +1062,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start(291) { - xs >- delaySubscription(30, scheduler) + xs.delaySubscription(30, scheduler) } XCTAssertEqual(res.messages, [ @@ -1088,7 +1088,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- skip(0, scheduler) + xs.skip(0, scheduler) } XCTAssertEqual(res.messages, [ @@ -1112,7 +1112,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- skip(15, scheduler) + xs.skip(15, scheduler) } XCTAssertEqual(res.messages, [ @@ -1135,7 +1135,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- skip(50, scheduler) + xs.skip(50, scheduler) } XCTAssertEqual(res.messages, [ @@ -1155,7 +1155,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- skip(50, scheduler) + xs.skip(50, scheduler) } XCTAssertEqual(res.messages, [ @@ -1174,7 +1174,7 @@ extension ObservableTimeTest { ]) let res = scheduler.start { - xs >- skip(50, scheduler) + xs.skip(50, scheduler) } XCTAssertEqual(res.messages, [ diff --git a/RxTests/RxSwiftTests/Tests/VariableTest.swift b/RxTests/RxSwiftTests/Tests/VariableTest.swift index 76c629b95..50c77bc14 100644 --- a/RxTests/RxSwiftTests/Tests/VariableTest.swift +++ b/RxTests/RxSwiftTests/Tests/VariableTest.swift @@ -19,23 +19,23 @@ class VariableTest : RxTest { var latestValue: Int? - let subscription = c >- subscribeNext { next in + let subscription = c .subscribeNext { next in latestValue = next } XCTAssertEqual(latestValue!, 3) - a.next(5) + a.sendNext(5) XCTAssertEqual(latestValue!, 7) - b.next(9) + b.sendNext(9) XCTAssertEqual(latestValue!, 14) subscription.dispose() - a.next(10) + a.sendNext(10) XCTAssertEqual(latestValue!, 14) } @@ -48,25 +48,25 @@ class VariableTest : RxTest { var latestValue: Int? - let subscription = c >- subscribeNext { next in + let subscription = c .subscribeNext { next in latestValue = next } XCTAssertEqual(latestValue!, 3) - a.next(5) + a.sendNext(5) XCTAssertEqual(latestValue!, 7) sendError(b, testError) - b.next(9) + b.sendNext(9) XCTAssertEqual(latestValue!, 7) subscription.dispose() - a.next(10) + a.sendNext(10) XCTAssertEqual(latestValue!, 7) } @@ -79,25 +79,25 @@ class VariableTest : RxTest { var latestValue: Int? - let subscription = c >- subscribeNext { next in + let subscription = c .subscribeNext { next in latestValue = next } XCTAssertEqual(latestValue!, 3) - a.next(5) + a.sendNext(5) XCTAssertEqual(latestValue!, 7) sendError(b, testError) - b.next(9) + b.sendNext(9) XCTAssertEqual(latestValue!, 7) subscription.dispose() - a.next(10) + a.sendNext(10) XCTAssertEqual(latestValue!, 7) } @@ -122,10 +122,10 @@ class VariableTest : RxTest { // because variables have initial values (starting element) var latestValueOfC : Int? = nil // let _ = doesn't retain. - let d/*: Disposable*/ = c >- subscribeNext { c in + let d/*: Disposable*/ = c .subscribeNext { c in //print("Next value of c = \(c)") latestValueOfC = c - } >- scopedDispose + } .scopedDispose justUseIt(d) @@ -133,13 +133,13 @@ class VariableTest : RxTest { // This will print: // Next value of c = 5 - a.next(3) + a.sendNext(3) XCTAssertEqual(latestValueOfC!, 5) // This will print: // Next value of c = 8 - b.next(5) + b.sendNext(5) XCTAssertEqual(latestValueOfC!, 8) } diff --git a/RxTests/RxTests.xcodeproj/project.pbxproj b/RxTests/RxTests.xcodeproj/project.pbxproj index 0c2b58602..8d20796ca 100644 --- a/RxTests/RxTests.xcodeproj/project.pbxproj +++ b/RxTests/RxTests.xcodeproj/project.pbxproj @@ -124,10 +124,10 @@ C81108411AF50E2A001C13E4 /* ConcurrencyTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConcurrencyTest.swift; sourceTree = ""; }; C81108421AF50E2A001C13E4 /* DisposableTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DisposableTest.swift; sourceTree = ""; }; C81108431AF50E2A001C13E4 /* Observable+AggregateTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+AggregateTest.swift"; sourceTree = ""; }; - C81108441AF50E2A001C13E4 /* Observable+BindingTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+BindingTest.swift"; sourceTree = ""; }; + C81108441AF50E2A001C13E4 /* Observable+BindingTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "Observable+BindingTest.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; C81108451AF50E2A001C13E4 /* Observable+MultipleTest+CombineLatest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+MultipleTest+CombineLatest.swift"; sourceTree = ""; }; C81108461AF50E2A001C13E4 /* Observable+MultipleTest+CombineLatest.tt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "Observable+MultipleTest+CombineLatest.tt"; sourceTree = ""; }; - C81108471AF50E2A001C13E4 /* Observable+MultipleTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+MultipleTest.swift"; sourceTree = ""; }; + C81108471AF50E2A001C13E4 /* Observable+MultipleTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "Observable+MultipleTest.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; C81108481AF50E2A001C13E4 /* Observable+SingleTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+SingleTest.swift"; sourceTree = ""; }; C81108491AF50E2A001C13E4 /* Observable+StandardSequenceOperatorsTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+StandardSequenceOperatorsTest.swift"; sourceTree = ""; }; C811084A1AF50E2A001C13E4 /* Observable+TimeTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+TimeTest.swift"; sourceTree = ""; }; @@ -146,9 +146,9 @@ C8AF26EE1B499E5C00131C03 /* DelegateProxyTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DelegateProxyTest.swift; sourceTree = ""; }; C8B5BEA01B4A6A82000D732C /* RxCocoaTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxCocoaTests.swift; sourceTree = ""; }; C8B605EB1B6260A10044410E /* AnonymousObservable+Test.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AnonymousObservable+Test.swift"; sourceTree = ""; }; - C8B787F91AF55CDE00206D02 /* Observable+ConcurrencyTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+ConcurrencyTest.swift"; sourceTree = ""; }; + C8B787F91AF55CDE00206D02 /* Observable+ConcurrencyTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "Observable+ConcurrencyTest.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; C8CDD7CA1B52B0730043F0C5 /* RxBlocking.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxBlocking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C8CDD7D31B52BEC40043F0C5 /* Observable+BlockingTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+BlockingTest.swift"; sourceTree = ""; }; + C8CDD7D31B52BEC40043F0C5 /* Observable+BlockingTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "Observable+BlockingTest.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; C8E381221B2063CC008CDC33 /* Observable+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+Extensions.swift"; sourceTree = ""; }; C8E381271B207D03008CDC33 /* PrimitiveHotObservable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PrimitiveHotObservable.swift; sourceTree = ""; }; C8E3812A1B2083C2008CDC33 /* PrimitiveMockObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PrimitiveMockObserver.swift; sourceTree = ""; }; diff --git a/RxTests/RxTests.xcodeproj/xcshareddata/xcschemes/RxTests-OSX.xcscheme b/RxTests/RxTests.xcodeproj/xcshareddata/xcschemes/RxTests-OSX.xcscheme index 4af5b8bb6..64aea4dd0 100644 --- a/RxTests/RxTests.xcodeproj/xcshareddata/xcschemes/RxTests-OSX.xcscheme +++ b/RxTests/RxTests.xcodeproj/xcshareddata/xcschemes/RxTests-OSX.xcscheme @@ -23,10 +23,10 @@ + shouldUseLaunchSchemeArgsEnv = "YES"> @@ -48,15 +48,18 @@ ReferencedContainer = "container:RxTests.xcodeproj"> + +