From 6ac94ea5b6a80f4c2bd82545c1998ededc8771c5 Mon Sep 17 00:00:00 2001 From: Krunoslav Zaher Date: Mon, 31 Aug 2015 10:59:37 +0200 Subject: [PATCH] Scheduler revamp (moving towards protocol extensions), internal optimizations, interface cleanup. --- Rx.xcodeproj/project.pbxproj | 54 +- RxBlocking/Observable+Blocking.swift | 19 +- .../Implementations/KVOObservable.swift | 2 +- RxExample/RxExample.xcodeproj/project.pbxproj | 1062 +++++++++-------- RxSwift/Disposables/NopDisposable.swift | 17 +- RxSwift/Disposables/ScheduledDisposable.swift | 2 +- RxSwift/ImmediateScheduler.swift | 19 +- RxSwift/Observable+Extensions.swift | 24 +- .../Implementations/AnonymousObservable.swift | 44 +- .../Implementations/DelaySubscription.swift | 5 +- .../Observables/Implementations/Empty.swift | 20 + .../Implementations/FailWith.swift | 22 + .../Observables/Implementations/Just.swift | 23 + .../Observables/Implementations/Never.swift | 15 + .../Implementations/ObservableBase.swift | 25 - .../Implementations/ObserveOn.swift | 2 +- .../ObserveOnSerialDispatchQueue.swift | 4 +- .../Implementations/ObserveSingleOn.swift | 2 +- .../Implementations/Producer.swift | 22 +- .../Observables/Implementations/Skip.swift | 4 +- .../Implementations/SubscribeOn.swift | 6 +- .../Observables/Implementations/Take.swift | 4 +- .../Implementations/Throttle.swift | 29 +- .../Observables/Implementations/Timer.swift | 23 +- RxSwift/Observables/Observable+Creation.swift | 20 +- RxSwift/Observables/Observable+Time.swift | 56 +- RxSwift/PeriodicScheduler.swift | 13 - RxSwift/Scheduler.swift | 43 +- .../ConcurrentDispatchQueueScheduler.swift | 20 +- .../Schedulers/CurrentThreadScheduler.swift | 39 + RxSwift/Schedulers/MainScheduler.swift | 2 +- .../Schedulers/OperationQueueScheduler.swift | 10 +- RxSwift/Schedulers/RecursiveScheduler.swift | 65 +- RxSwift/Schedulers/Scheduler+Extensions.swift | 59 +- .../SchedulerServices+Emulation.swift | 2 +- .../SerialDispatchQueueScheduler.swift | 25 +- .../Mocks/ColdObservable.swift | 2 +- .../Mocks/HotObservable.swift | 2 +- .../Schedulers/TestScheduler.swift | 16 +- .../Schedulers/VirtualTimeSchedulerBase.swift | 22 +- .../Tests/AnonymousObservable+Test.swift | 6 +- .../Tests/Observable+BlockingTest.swift | 58 +- .../Tests/Observable+ConcurrencyTest.swift | 8 +- .../Tests/Observable+TimeTest.swift | 14 +- 44 files changed, 933 insertions(+), 998 deletions(-) create mode 100644 RxSwift/Observables/Implementations/Empty.swift create mode 100644 RxSwift/Observables/Implementations/FailWith.swift create mode 100644 RxSwift/Observables/Implementations/Just.swift create mode 100644 RxSwift/Observables/Implementations/Never.swift delete mode 100644 RxSwift/Observables/Implementations/ObservableBase.swift delete mode 100644 RxSwift/PeriodicScheduler.swift create mode 100644 RxSwift/Schedulers/CurrentThreadScheduler.swift diff --git a/Rx.xcodeproj/project.pbxproj b/Rx.xcodeproj/project.pbxproj index b2224993..f6c71cba 100644 --- a/Rx.xcodeproj/project.pbxproj +++ b/Rx.xcodeproj/project.pbxproj @@ -65,8 +65,6 @@ C8093CFE1B8A72BE0088E94D /* Observable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8093C681B8A72BE0088E94D /* Observable.swift */; }; C8093CFF1B8A72BE0088E94D /* Amb.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8093C6B1B8A72BE0088E94D /* Amb.swift */; }; C8093D001B8A72BE0088E94D /* Amb.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8093C6B1B8A72BE0088E94D /* Amb.swift */; }; - C8093D011B8A72BE0088E94D /* AnonymousObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8093C6C1B8A72BE0088E94D /* AnonymousObservable.swift */; }; - C8093D021B8A72BE0088E94D /* AnonymousObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8093C6C1B8A72BE0088E94D /* AnonymousObservable.swift */; }; C8093D031B8A72BE0088E94D /* AsObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8093C6D1B8A72BE0088E94D /* AsObservable.swift */; }; C8093D041B8A72BE0088E94D /* AsObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8093C6D1B8A72BE0088E94D /* AsObservable.swift */; }; C8093D051B8A72BE0088E94D /* Catch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8093C6E1B8A72BE0088E94D /* Catch.swift */; }; @@ -99,8 +97,6 @@ C8093D241B8A72BE0088E94D /* Merge.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8093C7D1B8A72BE0088E94D /* Merge.swift */; }; C8093D251B8A72BE0088E94D /* Multicast.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8093C7E1B8A72BE0088E94D /* Multicast.swift */; }; C8093D261B8A72BE0088E94D /* Multicast.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8093C7E1B8A72BE0088E94D /* Multicast.swift */; }; - C8093D271B8A72BE0088E94D /* ObservableBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8093C7F1B8A72BE0088E94D /* ObservableBase.swift */; }; - C8093D281B8A72BE0088E94D /* ObservableBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8093C7F1B8A72BE0088E94D /* ObservableBase.swift */; }; C8093D291B8A72BE0088E94D /* ObserveOn.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8093C801B8A72BE0088E94D /* ObserveOn.swift */; }; C8093D2A1B8A72BE0088E94D /* ObserveOn.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8093C801B8A72BE0088E94D /* ObserveOn.swift */; }; C8093D2B1B8A72BE0088E94D /* ObserveOnSerialDispatchQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8093C811B8A72BE0088E94D /* ObserveOnSerialDispatchQueue.swift */; }; @@ -185,8 +181,6 @@ C8093D7C1B8A72BE0088E94D /* ObserverType+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8093CAA1B8A72BE0088E94D /* ObserverType+Extensions.swift */; }; C8093D7D1B8A72BE0088E94D /* ObserverType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8093CAB1B8A72BE0088E94D /* ObserverType.swift */; }; C8093D7E1B8A72BE0088E94D /* ObserverType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8093CAB1B8A72BE0088E94D /* ObserverType.swift */; }; - C8093D7F1B8A72BE0088E94D /* PeriodicScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8093CAC1B8A72BE0088E94D /* PeriodicScheduler.swift */; }; - C8093D801B8A72BE0088E94D /* PeriodicScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8093CAC1B8A72BE0088E94D /* PeriodicScheduler.swift */; }; C8093D851B8A72BE0088E94D /* Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8093CAF1B8A72BE0088E94D /* Rx.swift */; }; C8093D861B8A72BE0088E94D /* Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8093CAF1B8A72BE0088E94D /* Rx.swift */; }; C8093D871B8A72BE0088E94D /* RxBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8093CB01B8A72BE0088E94D /* RxBox.swift */; }; @@ -320,6 +314,18 @@ C8A468CB1B8A894100BF917B /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C88BB8711B07E5ED0064D411 /* RxSwift.framework */; }; C8C3D9FE1B935EDF004D233E /* Zip+CollectionType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3D9FD1B935EDF004D233E /* Zip+CollectionType.swift */; settings = {ASSET_TAGS = (); }; }; C8C3D9FF1B935EDF004D233E /* Zip+CollectionType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3D9FD1B935EDF004D233E /* Zip+CollectionType.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA031B9390C4004D233E /* Just.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA021B9390C4004D233E /* Just.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA041B9390C4004D233E /* Just.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA021B9390C4004D233E /* Just.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA061B9393AC004D233E /* Empty.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA051B9393AC004D233E /* Empty.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA071B9393AC004D233E /* Empty.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA051B9393AC004D233E /* Empty.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA091B93941E004D233E /* FailWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA081B93941E004D233E /* FailWith.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA0A1B93941E004D233E /* FailWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA081B93941E004D233E /* FailWith.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA0C1B93959F004D233E /* Never.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA0B1B93959F004D233E /* Never.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA0D1B93959F004D233E /* Never.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA0B1B93959F004D233E /* Never.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA0F1B939767004D233E /* CurrentThreadScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA0E1B939767004D233E /* CurrentThreadScheduler.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA101B939767004D233E /* CurrentThreadScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA0E1B939767004D233E /* CurrentThreadScheduler.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA121B93A3EA004D233E /* AnonymousObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA111B93A3EA004D233E /* AnonymousObservable.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA131B93A3EA004D233E /* AnonymousObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA111B93A3EA004D233E /* AnonymousObservable.swift */; settings = {ASSET_TAGS = (); }; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -359,7 +365,6 @@ C8093C671B8A72BE0088E94D /* Observable+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+Extensions.swift"; sourceTree = ""; }; C8093C681B8A72BE0088E94D /* Observable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Observable.swift; sourceTree = ""; }; C8093C6B1B8A72BE0088E94D /* Amb.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Amb.swift; sourceTree = ""; }; - C8093C6C1B8A72BE0088E94D /* AnonymousObservable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnonymousObservable.swift; sourceTree = ""; }; C8093C6D1B8A72BE0088E94D /* AsObservable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsObservable.swift; sourceTree = ""; }; C8093C6E1B8A72BE0088E94D /* Catch.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Catch.swift; sourceTree = ""; }; C8093C6F1B8A72BE0088E94D /* CombineLatest+arity.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CombineLatest+arity.swift"; sourceTree = ""; }; @@ -377,7 +382,6 @@ C8093C7C1B8A72BE0088E94D /* Map.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Map.swift; sourceTree = ""; }; C8093C7D1B8A72BE0088E94D /* Merge.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Merge.swift; sourceTree = ""; }; C8093C7E1B8A72BE0088E94D /* Multicast.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Multicast.swift; sourceTree = ""; }; - C8093C7F1B8A72BE0088E94D /* ObservableBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObservableBase.swift; sourceTree = ""; }; C8093C801B8A72BE0088E94D /* ObserveOn.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObserveOn.swift; sourceTree = ""; }; C8093C811B8A72BE0088E94D /* ObserveOnSerialDispatchQueue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObserveOnSerialDispatchQueue.swift; sourceTree = ""; }; C8093C821B8A72BE0088E94D /* ObserveSingleOn.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObserveSingleOn.swift; sourceTree = ""; }; @@ -421,7 +425,6 @@ C8093CA91B8A72BE0088E94D /* TailRecursiveSink.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TailRecursiveSink.swift; sourceTree = ""; }; C8093CAA1B8A72BE0088E94D /* ObserverType+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ObserverType+Extensions.swift"; sourceTree = ""; }; C8093CAB1B8A72BE0088E94D /* ObserverType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObserverType.swift; sourceTree = ""; }; - C8093CAC1B8A72BE0088E94D /* PeriodicScheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeriodicScheduler.swift; sourceTree = ""; }; C8093CAF1B8A72BE0088E94D /* Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Rx.swift; sourceTree = ""; }; C8093CB01B8A72BE0088E94D /* RxBox.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxBox.swift; sourceTree = ""; }; C8093CB11B8A72BE0088E94D /* RxResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxResult.swift; sourceTree = ""; }; @@ -510,6 +513,12 @@ C88BB8711B07E5ED0064D411 /* RxSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C8A56AD71AD7424700B4673B /* RxSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C8C3D9FD1B935EDF004D233E /* Zip+CollectionType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Zip+CollectionType.swift"; sourceTree = ""; }; + C8C3DA021B9390C4004D233E /* Just.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Just.swift; sourceTree = ""; }; + C8C3DA051B9393AC004D233E /* Empty.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Empty.swift; sourceTree = ""; }; + C8C3DA081B93941E004D233E /* FailWith.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FailWith.swift; sourceTree = ""; }; + C8C3DA0B1B93959F004D233E /* Never.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Never.swift; sourceTree = ""; }; + C8C3DA0E1B939767004D233E /* CurrentThreadScheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CurrentThreadScheduler.swift; sourceTree = ""; }; + C8C3DA111B93A3EA004D233E /* AnonymousObservable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnonymousObservable.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -580,7 +589,6 @@ C8093CA01B8A72BE0088E94D /* ObserverOf.swift */, C8093CAB1B8A72BE0088E94D /* ObserverType.swift */, C8093CAA1B8A72BE0088E94D /* ObserverType+Extensions.swift */, - C8093CAC1B8A72BE0088E94D /* PeriodicScheduler.swift */, C8093CAF1B8A72BE0088E94D /* Rx.swift */, C8093CB01B8A72BE0088E94D /* RxBox.swift */, C8093CB11B8A72BE0088E94D /* RxResult.swift */, @@ -658,7 +666,6 @@ isa = PBXGroup; children = ( C8093C6B1B8A72BE0088E94D /* Amb.swift */, - C8093C6C1B8A72BE0088E94D /* AnonymousObservable.swift */, C8093C6D1B8A72BE0088E94D /* AsObservable.swift */, C8093C6E1B8A72BE0088E94D /* Catch.swift */, C8093C711B8A72BE0088E94D /* CombineLatest.swift */, @@ -677,7 +684,6 @@ C8093C7C1B8A72BE0088E94D /* Map.swift */, C8093C7D1B8A72BE0088E94D /* Merge.swift */, C8093C7E1B8A72BE0088E94D /* Multicast.swift */, - C8093C7F1B8A72BE0088E94D /* ObservableBase.swift */, C8093C801B8A72BE0088E94D /* ObserveOn.swift */, C8093C811B8A72BE0088E94D /* ObserveOnSerialDispatchQueue.swift */, C8093C821B8A72BE0088E94D /* ObserveSingleOn.swift */, @@ -700,6 +706,11 @@ C8093C921B8A72BE0088E94D /* Zip+arity.swift */, C8093C931B8A72BE0088E94D /* Zip+arity.tt */, C8C3D9FD1B935EDF004D233E /* Zip+CollectionType.swift */, + C8C3DA021B9390C4004D233E /* Just.swift */, + C8C3DA051B9393AC004D233E /* Empty.swift */, + C8C3DA081B93941E004D233E /* FailWith.swift */, + C8C3DA0B1B93959F004D233E /* Never.swift */, + C8C3DA111B93A3EA004D233E /* AnonymousObservable.swift */, ); path = Implementations; sourceTree = ""; @@ -730,6 +741,7 @@ C8093CBA1B8A72BE0088E94D /* Scheduler+Extensions.swift */, C8093CBB1B8A72BE0088E94D /* SchedulerServices+Emulation.swift */, C8093CBC1B8A72BE0088E94D /* SerialDispatchQueueScheduler.swift */, + C8C3DA0E1B939767004D233E /* CurrentThreadScheduler.swift */, ); path = Schedulers; sourceTree = ""; @@ -1296,13 +1308,14 @@ C8093CDA1B8A72BE0088E94D /* BooleanDisposable.swift in Sources */, C8093D5A1B8A72BE0088E94D /* Observable+Creation.swift in Sources */, C8093CCC1B8A72BE0088E94D /* ConnectableObservableType.swift in Sources */, + C8C3DA041B9390C4004D233E /* Just.swift in Sources */, C8093CE61B8A72BE0088E94D /* NopDisposable.swift in Sources */, C8093CD41B8A72BE0088E94D /* Disposable.swift in Sources */, C8093CC41B8A72BE0088E94D /* AnyObject+Rx.swift in Sources */, C8093CEE1B8A72BE0088E94D /* SingleAssignmentDisposable.swift in Sources */, C8093D681B8A72BE0088E94D /* Observer.swift in Sources */, + C8C3DA0A1B93941E004D233E /* FailWith.swift in Sources */, C8093D781B8A72BE0088E94D /* ScheduledObserver.swift in Sources */, - C8093D801B8A72BE0088E94D /* PeriodicScheduler.swift in Sources */, C8093D9C1B8A72BE0088E94D /* SchedulerServices+Emulation.swift in Sources */, C8093D6A1B8A72BE0088E94D /* ObserverOf.swift in Sources */, C8093D3C1B8A72BE0088E94D /* Skip.swift in Sources */, @@ -1310,6 +1323,7 @@ C8093D2E1B8A72BE0088E94D /* ObserveSingleOn.swift in Sources */, C8093D4E1B8A72BE0088E94D /* Zip+arity.swift in Sources */, C8093D4C1B8A72BE0088E94D /* Timer.swift in Sources */, + C8C3DA071B9393AC004D233E /* Empty.swift in Sources */, C8093D761B8A72BE0088E94D /* SafeObserver.swift in Sources */, C8093D881B8A72BE0088E94D /* RxBox.swift in Sources */, C8093D3A1B8A72BE0088E94D /* Sink.swift in Sources */, @@ -1329,10 +1343,8 @@ C8093D121B8A72BE0088E94D /* ConnectableObservable.swift in Sources */, C8093D621B8A72BE0088E94D /* Observable+StandardSequenceOperators.swift in Sources */, C8093D1A1B8A72BE0088E94D /* DistinctUntilChanged.swift in Sources */, - C8093D021B8A72BE0088E94D /* AnonymousObservable.swift in Sources */, C8093D561B8A72BE0088E94D /* Observable+Binding.swift in Sources */, C8093D8A1B8A72BE0088E94D /* RxResult.swift in Sources */, - C8093D281B8A72BE0088E94D /* ObservableBase.swift in Sources */, C8093D7A1B8A72BE0088E94D /* TailRecursiveSink.swift in Sources */, C8093CC81B8A72BE0088E94D /* AsyncLock.swift in Sources */, C8093D9A1B8A72BE0088E94D /* Scheduler+Extensions.swift in Sources */, @@ -1341,6 +1353,7 @@ C8093D361B8A72BE0088E94D /* Sample.swift in Sources */, C8093CEA1B8A72BE0088E94D /* ScopedDispose.swift in Sources */, C8093D261B8A72BE0088E94D /* Multicast.swift in Sources */, + C8C3DA101B939767004D233E /* CurrentThreadScheduler.swift in Sources */, C8093D861B8A72BE0088E94D /* Rx.swift in Sources */, C80D342F1B9245A40014629D /* CombineLatest+CollectionType.swift in Sources */, C8093DA61B8A72BE0088E94D /* SubjectType.swift in Sources */, @@ -1358,6 +1371,7 @@ C8093D981B8A72BE0088E94D /* RecursiveScheduler.swift in Sources */, C8093D381B8A72BE0088E94D /* Scan.swift in Sources */, C8093CD21B8A72BE0088E94D /* Queue.swift in Sources */, + C8C3DA131B93A3EA004D233E /* AnonymousObservable.swift in Sources */, C8093D201B8A72BE0088E94D /* FlatMap.swift in Sources */, C8093CE01B8A72BE0088E94D /* DisposeBase.swift in Sources */, C8093CD61B8A72BE0088E94D /* AnonymousDisposable.swift in Sources */, @@ -1398,6 +1412,7 @@ C8093CFE1B8A72BE0088E94D /* Observable.swift in Sources */, C8093CE21B8A72BE0088E94D /* NAryDisposable.swift in Sources */, C8093CEC1B8A72BE0088E94D /* SerialDisposable.swift in Sources */, + C8C3DA0D1B93959F004D233E /* Never.swift in Sources */, C8093D721B8A72BE0088E94D /* NopObserver.swift in Sources */, C8093D7C1B8A72BE0088E94D /* ObserverType+Extensions.swift in Sources */, C8093CF61B8A72BE0088E94D /* Event.swift in Sources */, @@ -1412,13 +1427,14 @@ C8093CD91B8A72BE0088E94D /* BooleanDisposable.swift in Sources */, C8093D591B8A72BE0088E94D /* Observable+Creation.swift in Sources */, C8093CCB1B8A72BE0088E94D /* ConnectableObservableType.swift in Sources */, + C8C3DA031B9390C4004D233E /* Just.swift in Sources */, C8093CE51B8A72BE0088E94D /* NopDisposable.swift in Sources */, C8093CD31B8A72BE0088E94D /* Disposable.swift in Sources */, C8093CC31B8A72BE0088E94D /* AnyObject+Rx.swift in Sources */, C8093CED1B8A72BE0088E94D /* SingleAssignmentDisposable.swift in Sources */, C8093D671B8A72BE0088E94D /* Observer.swift in Sources */, + C8C3DA091B93941E004D233E /* FailWith.swift in Sources */, C8093D771B8A72BE0088E94D /* ScheduledObserver.swift in Sources */, - C8093D7F1B8A72BE0088E94D /* PeriodicScheduler.swift in Sources */, C8093D9B1B8A72BE0088E94D /* SchedulerServices+Emulation.swift in Sources */, C8093D691B8A72BE0088E94D /* ObserverOf.swift in Sources */, C8093D3B1B8A72BE0088E94D /* Skip.swift in Sources */, @@ -1426,6 +1442,7 @@ C8093D2D1B8A72BE0088E94D /* ObserveSingleOn.swift in Sources */, C8093D4D1B8A72BE0088E94D /* Zip+arity.swift in Sources */, C8093D4B1B8A72BE0088E94D /* Timer.swift in Sources */, + C8C3DA061B9393AC004D233E /* Empty.swift in Sources */, C8093D751B8A72BE0088E94D /* SafeObserver.swift in Sources */, C8093D871B8A72BE0088E94D /* RxBox.swift in Sources */, C8093D391B8A72BE0088E94D /* Sink.swift in Sources */, @@ -1445,10 +1462,8 @@ C8093D111B8A72BE0088E94D /* ConnectableObservable.swift in Sources */, C8093D611B8A72BE0088E94D /* Observable+StandardSequenceOperators.swift in Sources */, C8093D191B8A72BE0088E94D /* DistinctUntilChanged.swift in Sources */, - C8093D011B8A72BE0088E94D /* AnonymousObservable.swift in Sources */, C8093D551B8A72BE0088E94D /* Observable+Binding.swift in Sources */, C8093D891B8A72BE0088E94D /* RxResult.swift in Sources */, - C8093D271B8A72BE0088E94D /* ObservableBase.swift in Sources */, C8093D791B8A72BE0088E94D /* TailRecursiveSink.swift in Sources */, C8093CC71B8A72BE0088E94D /* AsyncLock.swift in Sources */, C8093D991B8A72BE0088E94D /* Scheduler+Extensions.swift in Sources */, @@ -1457,6 +1472,7 @@ C8093D351B8A72BE0088E94D /* Sample.swift in Sources */, C8093CE91B8A72BE0088E94D /* ScopedDispose.swift in Sources */, C8093D251B8A72BE0088E94D /* Multicast.swift in Sources */, + C8C3DA0F1B939767004D233E /* CurrentThreadScheduler.swift in Sources */, C8093D851B8A72BE0088E94D /* Rx.swift in Sources */, C80D342E1B9245A40014629D /* CombineLatest+CollectionType.swift in Sources */, C8093DA51B8A72BE0088E94D /* SubjectType.swift in Sources */, @@ -1474,6 +1490,7 @@ C8093D971B8A72BE0088E94D /* RecursiveScheduler.swift in Sources */, C8093D371B8A72BE0088E94D /* Scan.swift in Sources */, C8093CD11B8A72BE0088E94D /* Queue.swift in Sources */, + C8C3DA121B93A3EA004D233E /* AnonymousObservable.swift in Sources */, C8093D1F1B8A72BE0088E94D /* FlatMap.swift in Sources */, C8093CDF1B8A72BE0088E94D /* DisposeBase.swift in Sources */, C8093CD51B8A72BE0088E94D /* AnonymousDisposable.swift in Sources */, @@ -1514,6 +1531,7 @@ C8093CFD1B8A72BE0088E94D /* Observable.swift in Sources */, C8093CE11B8A72BE0088E94D /* NAryDisposable.swift in Sources */, C8093CEB1B8A72BE0088E94D /* SerialDisposable.swift in Sources */, + C8C3DA0C1B93959F004D233E /* Never.swift in Sources */, C8093D711B8A72BE0088E94D /* NopObserver.swift in Sources */, C8093D7B1B8A72BE0088E94D /* ObserverType+Extensions.swift in Sources */, C8093CF51B8A72BE0088E94D /* Event.swift in Sources */, diff --git a/RxBlocking/Observable+Blocking.swift b/RxBlocking/Observable+Blocking.swift index 10d3ed2e..050acb92 100644 --- a/RxBlocking/Observable+Blocking.swift +++ b/RxBlocking/Observable+Blocking.swift @@ -12,8 +12,7 @@ import RxSwift #endif extension ObservableType { - public func toArray() - -> RxResult<[E]> { + public func toArray() throws -> [E] { let condition = NSCondition() var elements = [E]() @@ -46,15 +45,15 @@ extension ObservableType { condition.unlock() if let error = error { - return failure(error) + throw error } - return success(elements) + return elements } } extension ObservableType { - public var first: RxResult { + public func first() throws -> E? { let condition = NSCondition() var element: E? @@ -92,15 +91,15 @@ extension ObservableType { condition.unlock() if let error = error { - return failure(error) + throw error } - return success(element) + return element } } extension ObservableType { - public var last: RxResult { + public func last() throws -> E? { let condition = NSCondition() var element: E? @@ -136,9 +135,9 @@ extension ObservableType { condition.unlock() if let error = error { - return failure(error) + throw error } - return success(element) + return element } } \ No newline at end of file diff --git a/RxCocoa/Common/Observables/Implementations/KVOObservable.swift b/RxCocoa/Common/Observables/Implementations/KVOObservable.swift index 1b49a776..3e8d8813 100644 --- a/RxCocoa/Common/Observables/Implementations/KVOObservable.swift +++ b/RxCocoa/Common/Observables/Implementations/KVOObservable.swift @@ -11,7 +11,7 @@ import Foundation import RxSwift #endif -class KVOObservable : Producer +class KVOObservable : _Producer , KVOObservableProtocol { unowned var target: AnyObject var strongTarget: AnyObject? diff --git a/RxExample/RxExample.xcodeproj/project.pbxproj b/RxExample/RxExample.xcodeproj/project.pbxproj index 1ba4c3a4..a8c5c459 100644 --- a/RxExample/RxExample.xcodeproj/project.pbxproj +++ b/RxExample/RxExample.xcodeproj/project.pbxproj @@ -68,117 +68,6 @@ C83367241AD029AE00C668A7 /* HtmlParsing.swift in Sources */ = {isa = PBXBuildFile; fileRef = C83367111AD029AE00C668A7 /* HtmlParsing.swift */; }; C83367251AD029AE00C668A7 /* ImageService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C83367121AD029AE00C668A7 /* ImageService.swift */; }; C83367311AD029AE00C668A7 /* Wireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = C83367211AD029AE00C668A7 /* Wireframe.swift */; }; - C836EC0E1B8A7A4500AB941D /* AnyObject+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EB931B8A7A4500AB941D /* AnyObject+Rx.swift */; }; - C836EC0F1B8A7A4500AB941D /* Cancelable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EB941B8A7A4500AB941D /* Cancelable.swift */; }; - C836EC101B8A7A4500AB941D /* AsyncLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EB961B8A7A4500AB941D /* AsyncLock.swift */; }; - C836EC111B8A7A4500AB941D /* Lock.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EB971B8A7A4500AB941D /* Lock.swift */; }; - C836EC121B8A7A4500AB941D /* ConnectableObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EB981B8A7A4500AB941D /* ConnectableObservableType.swift */; }; - C836EC131B8A7A4500AB941D /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EB9A1B8A7A4500AB941D /* Bag.swift */; }; - C836EC141B8A7A4500AB941D /* InfiniteSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EB9B1B8A7A4500AB941D /* InfiniteSequence.swift */; }; - C836EC151B8A7A4500AB941D /* Queue.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EB9C1B8A7A4500AB941D /* Queue.swift */; }; - C836EC161B8A7A4500AB941D /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EB9D1B8A7A4500AB941D /* Disposable.swift */; }; - C836EC171B8A7A4500AB941D /* AnonymousDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EB9F1B8A7A4500AB941D /* AnonymousDisposable.swift */; }; - C836EC181B8A7A4500AB941D /* BinaryDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBA01B8A7A4500AB941D /* BinaryDisposable.swift */; }; - C836EC191B8A7A4500AB941D /* BooleanDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBA11B8A7A4500AB941D /* BooleanDisposable.swift */; }; - C836EC1A1B8A7A4500AB941D /* CompositeDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBA21B8A7A4500AB941D /* CompositeDisposable.swift */; }; - C836EC1B1B8A7A4500AB941D /* DisposeBag.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBA31B8A7A4500AB941D /* DisposeBag.swift */; }; - C836EC1C1B8A7A4500AB941D /* DisposeBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBA41B8A7A4500AB941D /* DisposeBase.swift */; }; - C836EC1D1B8A7A4500AB941D /* NAryDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBA51B8A7A4500AB941D /* NAryDisposable.swift */; }; - C836EC1E1B8A7A4500AB941D /* NAryDisposable.tt in Resources */ = {isa = PBXBuildFile; fileRef = C836EBA61B8A7A4500AB941D /* NAryDisposable.tt */; }; - C836EC1F1B8A7A4500AB941D /* NopDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBA71B8A7A4500AB941D /* NopDisposable.swift */; }; - C836EC201B8A7A4500AB941D /* ScheduledDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBA81B8A7A4500AB941D /* ScheduledDisposable.swift */; }; - C836EC211B8A7A4500AB941D /* ScopedDispose.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBA91B8A7A4500AB941D /* ScopedDispose.swift */; }; - C836EC221B8A7A4500AB941D /* SerialDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBAA1B8A7A4500AB941D /* SerialDisposable.swift */; }; - C836EC231B8A7A4500AB941D /* SingleAssignmentDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBAB1B8A7A4500AB941D /* SingleAssignmentDisposable.swift */; }; - C836EC241B8A7A4500AB941D /* StableCompositeDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBAC1B8A7A4500AB941D /* StableCompositeDisposable.swift */; }; - C836EC251B8A7A4500AB941D /* TernaryDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBAD1B8A7A4500AB941D /* TernaryDisposable.swift */; }; - C836EC261B8A7A4500AB941D /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBAE1B8A7A4500AB941D /* Error.swift */; }; - C836EC271B8A7A4500AB941D /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBAF1B8A7A4500AB941D /* Event.swift */; }; - C836EC281B8A7A4500AB941D /* ImmediateScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBB01B8A7A4500AB941D /* ImmediateScheduler.swift */; }; - C836EC291B8A7A4500AB941D /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = C836EBB11B8A7A4500AB941D /* Info.plist */; }; - C836EC2A1B8A7A4500AB941D /* Observable+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBB21B8A7A4500AB941D /* Observable+Extensions.swift */; }; - C836EC2B1B8A7A4500AB941D /* Observable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBB31B8A7A4500AB941D /* Observable.swift */; }; - C836EC2C1B8A7A4500AB941D /* Amb.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBB61B8A7A4500AB941D /* Amb.swift */; }; - C836EC2D1B8A7A4500AB941D /* AnonymousObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBB71B8A7A4500AB941D /* AnonymousObservable.swift */; }; - C836EC2E1B8A7A4500AB941D /* AsObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBB81B8A7A4500AB941D /* AsObservable.swift */; }; - C836EC2F1B8A7A4500AB941D /* Catch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBB91B8A7A4500AB941D /* Catch.swift */; }; - C836EC301B8A7A4500AB941D /* CombineLatest+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBBA1B8A7A4500AB941D /* CombineLatest+arity.swift */; }; - C836EC311B8A7A4500AB941D /* CombineLatest+arity.tt in Resources */ = {isa = PBXBuildFile; fileRef = C836EBBB1B8A7A4500AB941D /* CombineLatest+arity.tt */; }; - C836EC321B8A7A4500AB941D /* CombineLatest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBBC1B8A7A4500AB941D /* CombineLatest.swift */; }; - C836EC331B8A7A4500AB941D /* Concat.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBBD1B8A7A4500AB941D /* Concat.swift */; }; - C836EC351B8A7A4500AB941D /* ConnectableObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBBF1B8A7A4500AB941D /* ConnectableObservable.swift */; }; - C836EC361B8A7A4500AB941D /* Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBC01B8A7A4500AB941D /* Debug.swift */; }; - C836EC371B8A7A4500AB941D /* Deferred.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBC11B8A7A4500AB941D /* Deferred.swift */; }; - C836EC381B8A7A4500AB941D /* DelaySubscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBC21B8A7A4500AB941D /* DelaySubscription.swift */; }; - C836EC391B8A7A4500AB941D /* DistinctUntilChanged.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBC31B8A7A4500AB941D /* DistinctUntilChanged.swift */; }; - C836EC3A1B8A7A4500AB941D /* Do.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBC41B8A7A4500AB941D /* Do.swift */; }; - C836EC3B1B8A7A4500AB941D /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBC51B8A7A4500AB941D /* Filter.swift */; }; - C836EC3C1B8A7A4500AB941D /* FlatMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBC61B8A7A4500AB941D /* FlatMap.swift */; }; - C836EC3D1B8A7A4500AB941D /* Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBC71B8A7A4500AB941D /* Map.swift */; }; - C836EC3E1B8A7A4500AB941D /* Merge.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBC81B8A7A4500AB941D /* Merge.swift */; }; - C836EC3F1B8A7A4500AB941D /* Multicast.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBC91B8A7A4500AB941D /* Multicast.swift */; }; - C836EC401B8A7A4500AB941D /* ObservableBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBCA1B8A7A4500AB941D /* ObservableBase.swift */; }; - C836EC411B8A7A4500AB941D /* ObserveOn.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBCB1B8A7A4500AB941D /* ObserveOn.swift */; }; - C836EC421B8A7A4500AB941D /* ObserveOnSerialDispatchQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBCC1B8A7A4500AB941D /* ObserveOnSerialDispatchQueue.swift */; }; - C836EC431B8A7A4500AB941D /* ObserveSingleOn.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBCD1B8A7A4500AB941D /* ObserveSingleOn.swift */; }; - C836EC441B8A7A4500AB941D /* Producer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBCE1B8A7A4500AB941D /* Producer.swift */; }; - C836EC451B8A7A4500AB941D /* Reduce.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBCF1B8A7A4500AB941D /* Reduce.swift */; }; - C836EC461B8A7A4500AB941D /* RefCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBD01B8A7A4500AB941D /* RefCount.swift */; }; - C836EC471B8A7A4500AB941D /* Sample.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBD11B8A7A4500AB941D /* Sample.swift */; }; - C836EC481B8A7A4500AB941D /* Scan.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBD21B8A7A4500AB941D /* Scan.swift */; }; - C836EC491B8A7A4500AB941D /* Sink.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBD31B8A7A4500AB941D /* Sink.swift */; }; - C836EC4A1B8A7A4500AB941D /* Skip.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBD41B8A7A4500AB941D /* Skip.swift */; }; - C836EC4B1B8A7A4500AB941D /* StartWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBD51B8A7A4500AB941D /* StartWith.swift */; }; - C836EC4C1B8A7A4500AB941D /* SubscribeOn.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBD61B8A7A4500AB941D /* SubscribeOn.swift */; }; - C836EC4D1B8A7A4500AB941D /* Switch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBD71B8A7A4500AB941D /* Switch.swift */; }; - C836EC4E1B8A7A4500AB941D /* Take.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBD81B8A7A4500AB941D /* Take.swift */; }; - C836EC4F1B8A7A4500AB941D /* TakeUntil.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBD91B8A7A4500AB941D /* TakeUntil.swift */; }; - C836EC501B8A7A4500AB941D /* TakeWhile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBDA1B8A7A4500AB941D /* TakeWhile.swift */; }; - C836EC511B8A7A4500AB941D /* Throttle.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBDB1B8A7A4500AB941D /* Throttle.swift */; }; - C836EC521B8A7A4500AB941D /* Timer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBDC1B8A7A4500AB941D /* Timer.swift */; }; - C836EC531B8A7A4500AB941D /* Zip+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBDD1B8A7A4500AB941D /* Zip+arity.swift */; }; - C836EC541B8A7A4500AB941D /* Zip+arity.tt in Resources */ = {isa = PBXBuildFile; fileRef = C836EBDE1B8A7A4500AB941D /* Zip+arity.tt */; }; - C836EC551B8A7A4500AB941D /* Zip.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBDF1B8A7A4500AB941D /* Zip.swift */; }; - C836EC561B8A7A4500AB941D /* Observable+Aggregate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBE01B8A7A4500AB941D /* Observable+Aggregate.swift */; }; - C836EC571B8A7A4500AB941D /* Observable+Binding.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBE11B8A7A4500AB941D /* Observable+Binding.swift */; }; - C836EC581B8A7A4500AB941D /* Observable+Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBE21B8A7A4500AB941D /* Observable+Concurrency.swift */; }; - C836EC591B8A7A4500AB941D /* Observable+Creation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBE31B8A7A4500AB941D /* Observable+Creation.swift */; }; - C836EC5A1B8A7A4500AB941D /* Observable+Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBE41B8A7A4500AB941D /* Observable+Debug.swift */; }; - C836EC5B1B8A7A4500AB941D /* Observable+Multiple.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBE51B8A7A4500AB941D /* Observable+Multiple.swift */; }; - C836EC5C1B8A7A4500AB941D /* Observable+Single.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBE61B8A7A4500AB941D /* Observable+Single.swift */; }; - C836EC5D1B8A7A4500AB941D /* Observable+StandardSequenceOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBE71B8A7A4500AB941D /* Observable+StandardSequenceOperators.swift */; }; - C836EC5E1B8A7A4500AB941D /* Observable+Time.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBE81B8A7A4500AB941D /* Observable+Time.swift */; }; - C836EC5F1B8A7A4500AB941D /* ObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBE91B8A7A4500AB941D /* ObservableType.swift */; }; - C836EC601B8A7A4500AB941D /* Observer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBEA1B8A7A4500AB941D /* Observer.swift */; }; - C836EC611B8A7A4500AB941D /* ObserverOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBEB1B8A7A4500AB941D /* ObserverOf.swift */; }; - C836EC621B8A7A4500AB941D /* AnonymousObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBED1B8A7A4500AB941D /* AnonymousObserver.swift */; }; - C836EC631B8A7A4500AB941D /* AutoDetachObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBEE1B8A7A4500AB941D /* AutoDetachObserver.swift */; }; - C836EC641B8A7A4500AB941D /* DoneObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBEF1B8A7A4500AB941D /* DoneObserver.swift */; }; - C836EC651B8A7A4500AB941D /* NopObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBF01B8A7A4500AB941D /* NopObserver.swift */; }; - C836EC661B8A7A4500AB941D /* ObserverBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBF11B8A7A4500AB941D /* ObserverBase.swift */; }; - C836EC671B8A7A4500AB941D /* SafeObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBF21B8A7A4500AB941D /* SafeObserver.swift */; }; - C836EC681B8A7A4500AB941D /* ScheduledObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBF31B8A7A4500AB941D /* ScheduledObserver.swift */; }; - C836EC691B8A7A4500AB941D /* TailRecursiveSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBF41B8A7A4500AB941D /* TailRecursiveSink.swift */; }; - C836EC6A1B8A7A4500AB941D /* ObserverType+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBF51B8A7A4500AB941D /* ObserverType+Extensions.swift */; }; - C836EC6B1B8A7A4500AB941D /* ObserverType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBF61B8A7A4500AB941D /* ObserverType.swift */; }; - C836EC6C1B8A7A4500AB941D /* PeriodicScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBF71B8A7A4500AB941D /* PeriodicScheduler.swift */; }; - C836EC6D1B8A7A4500AB941D /* Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBFA1B8A7A4500AB941D /* Rx.swift */; }; - C836EC6E1B8A7A4500AB941D /* RxBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBFB1B8A7A4500AB941D /* RxBox.swift */; }; - C836EC6F1B8A7A4500AB941D /* RxResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBFC1B8A7A4500AB941D /* RxResult.swift */; }; - C836EC701B8A7A4500AB941D /* Scheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EBFE1B8A7A4500AB941D /* Scheduler.swift */; }; - C836EC711B8A7A4500AB941D /* ConcurrentDispatchQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EC001B8A7A4500AB941D /* ConcurrentDispatchQueueScheduler.swift */; }; - C836EC721B8A7A4500AB941D /* DispatchQueueSchedulerPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EC011B8A7A4500AB941D /* DispatchQueueSchedulerPriority.swift */; }; - C836EC731B8A7A4500AB941D /* MainScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EC021B8A7A4500AB941D /* MainScheduler.swift */; }; - C836EC741B8A7A4500AB941D /* OperationQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EC031B8A7A4500AB941D /* OperationQueueScheduler.swift */; }; - C836EC751B8A7A4500AB941D /* RecursiveScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EC041B8A7A4500AB941D /* RecursiveScheduler.swift */; }; - C836EC761B8A7A4500AB941D /* Scheduler+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EC051B8A7A4500AB941D /* Scheduler+Extensions.swift */; }; - C836EC771B8A7A4500AB941D /* SchedulerServices+Emulation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EC061B8A7A4500AB941D /* SchedulerServices+Emulation.swift */; }; - C836EC781B8A7A4500AB941D /* SerialDispatchQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EC071B8A7A4500AB941D /* SerialDispatchQueueScheduler.swift */; }; - C836EC791B8A7A4500AB941D /* BehaviorSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EC091B8A7A4500AB941D /* BehaviorSubject.swift */; }; - C836EC7A1B8A7A4500AB941D /* PublishSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EC0A1B8A7A4500AB941D /* PublishSubject.swift */; }; - C836EC7B1B8A7A4500AB941D /* ReplaySubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EC0B1B8A7A4500AB941D /* ReplaySubject.swift */; }; - C836EC7C1B8A7A4500AB941D /* SubjectType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EC0C1B8A7A4500AB941D /* SubjectType.swift */; }; - C836EC7D1B8A7A4500AB941D /* Variable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C836EC0D1B8A7A4500AB941D /* Variable.swift */; }; C836ECCA1B8A7AA600AB941D /* _RX.m in Sources */ = {isa = PBXBuildFile; fileRef = C836EC811B8A7AA600AB941D /* _RX.m */; }; C836ECCB1B8A7AA600AB941D /* _RXDelegateProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = C836EC831B8A7AA600AB941D /* _RXDelegateProxy.m */; }; C836ECCC1B8A7AA600AB941D /* _RXKVOObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = C836EC851B8A7AA600AB941D /* _RXKVOObserver.m */; }; @@ -276,8 +165,122 @@ C8A468F21B8A8C2600BF917B /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8A468ED1B8A8BCC00BF917B /* RxCocoa.framework */; }; C8A468F31B8A8C2600BF917B /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8A468EB1B8A8BC900BF917B /* RxSwift.framework */; }; C8A57F741B40AF7C00D5570A /* Random.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = C8A57F721B40AF7C00D5570A /* Random.xcdatamodeld */; }; - C8C3D9FC1B935D1E004D233E /* CombineLatest+CollectionType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3D9FB1B935D1E004D233E /* CombineLatest+CollectionType.swift */; settings = {ASSET_TAGS = (); }; }; - C8C3DA011B936C11004D233E /* Zip+CollectionType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA001B936C11004D233E /* Zip+CollectionType.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA911B944DE3004D233E /* AnyObject+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA151B944DE3004D233E /* AnyObject+Rx.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA921B944DE3004D233E /* Cancelable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA161B944DE3004D233E /* Cancelable.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA931B944DE3004D233E /* AsyncLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA181B944DE3004D233E /* AsyncLock.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA941B944DE3004D233E /* Lock.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA191B944DE3004D233E /* Lock.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA951B944DE3004D233E /* ConnectableObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA1A1B944DE3004D233E /* ConnectableObservableType.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA961B944DE3004D233E /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA1C1B944DE3004D233E /* Bag.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA971B944DE3004D233E /* InfiniteSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA1D1B944DE3004D233E /* InfiniteSequence.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA981B944DE3004D233E /* Queue.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA1E1B944DE3004D233E /* Queue.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA991B944DE3004D233E /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA1F1B944DE3004D233E /* Disposable.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA9A1B944DE3004D233E /* AnonymousDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA211B944DE3004D233E /* AnonymousDisposable.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA9B1B944DE3004D233E /* BinaryDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA221B944DE3004D233E /* BinaryDisposable.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA9C1B944DE3004D233E /* BooleanDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA231B944DE3004D233E /* BooleanDisposable.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA9D1B944DE3004D233E /* CompositeDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA241B944DE3004D233E /* CompositeDisposable.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA9E1B944DE3004D233E /* DisposeBag.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA251B944DE3004D233E /* DisposeBag.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DA9F1B944DE3004D233E /* DisposeBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA261B944DE3004D233E /* DisposeBase.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAA01B944DE3004D233E /* NAryDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA271B944DE3004D233E /* NAryDisposable.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAA11B944DE3004D233E /* NAryDisposable.tt in Resources */ = {isa = PBXBuildFile; fileRef = C8C3DA281B944DE3004D233E /* NAryDisposable.tt */; settings = {ASSET_TAGS = (); }; }; + C8C3DAA21B944DE3004D233E /* NopDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA291B944DE3004D233E /* NopDisposable.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAA31B944DE3004D233E /* ScheduledDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA2A1B944DE3004D233E /* ScheduledDisposable.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAA41B944DE3004D233E /* ScopedDispose.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA2B1B944DE3004D233E /* ScopedDispose.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAA51B944DE3004D233E /* SerialDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA2C1B944DE3004D233E /* SerialDisposable.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAA61B944DE3004D233E /* SingleAssignmentDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA2D1B944DE3004D233E /* SingleAssignmentDisposable.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAA71B944DE3004D233E /* StableCompositeDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA2E1B944DE3004D233E /* StableCompositeDisposable.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAA81B944DE3004D233E /* TernaryDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA2F1B944DE3004D233E /* TernaryDisposable.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAA91B944DE3004D233E /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA301B944DE3004D233E /* Error.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAAA1B944DE3004D233E /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA311B944DE3004D233E /* Event.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAAB1B944DE3004D233E /* ImmediateScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA321B944DE3004D233E /* ImmediateScheduler.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAAC1B944DE3004D233E /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = C8C3DA331B944DE3004D233E /* Info.plist */; settings = {ASSET_TAGS = (); }; }; + C8C3DAAD1B944DE3004D233E /* Observable+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA341B944DE3004D233E /* Observable+Extensions.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAAE1B944DE3004D233E /* Observable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA351B944DE3004D233E /* Observable.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAAF1B944DE3004D233E /* Amb.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA381B944DE3004D233E /* Amb.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAB01B944DE3004D233E /* AnonymousObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA391B944DE3004D233E /* AnonymousObservable.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAB11B944DE3004D233E /* AsObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA3A1B944DE3004D233E /* AsObservable.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAB21B944DE3004D233E /* Catch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA3B1B944DE3004D233E /* Catch.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAB31B944DE3004D233E /* CombineLatest+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA3C1B944DE3004D233E /* CombineLatest+arity.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAB41B944DE3004D233E /* CombineLatest+arity.tt in Resources */ = {isa = PBXBuildFile; fileRef = C8C3DA3D1B944DE3004D233E /* CombineLatest+arity.tt */; settings = {ASSET_TAGS = (); }; }; + C8C3DAB51B944DE3004D233E /* CombineLatest+CollectionType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA3E1B944DE3004D233E /* CombineLatest+CollectionType.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAB61B944DE3004D233E /* CombineLatest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA3F1B944DE3004D233E /* CombineLatest.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAB71B944DE3004D233E /* Concat.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA401B944DE3004D233E /* Concat.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAB81B944DE3004D233E /* ConnectableObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA411B944DE3004D233E /* ConnectableObservable.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAB91B944DE3004D233E /* Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA421B944DE3004D233E /* Debug.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DABA1B944DE3004D233E /* Deferred.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA431B944DE3004D233E /* Deferred.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DABB1B944DE3004D233E /* DelaySubscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA441B944DE3004D233E /* DelaySubscription.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DABC1B944DE3004D233E /* DistinctUntilChanged.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA451B944DE3004D233E /* DistinctUntilChanged.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DABD1B944DE3004D233E /* Do.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA461B944DE3004D233E /* Do.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DABE1B944DE3004D233E /* Empty.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA471B944DE3004D233E /* Empty.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DABF1B944DE3004D233E /* FailWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA481B944DE3004D233E /* FailWith.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAC01B944DE3004D233E /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA491B944DE3004D233E /* Filter.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAC11B944DE3004D233E /* FlatMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA4A1B944DE3004D233E /* FlatMap.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAC21B944DE3004D233E /* Just.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA4B1B944DE3004D233E /* Just.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAC31B944DE3004D233E /* Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA4C1B944DE3004D233E /* Map.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAC41B944DE3004D233E /* Merge.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA4D1B944DE3004D233E /* Merge.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAC51B944DE3004D233E /* Multicast.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA4E1B944DE3004D233E /* Multicast.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAC61B944DE3004D233E /* Never.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA4F1B944DE3004D233E /* Never.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAC71B944DE3004D233E /* ObserveOn.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA501B944DE3004D233E /* ObserveOn.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAC81B944DE3004D233E /* ObserveOnSerialDispatchQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA511B944DE3004D233E /* ObserveOnSerialDispatchQueue.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAC91B944DE3004D233E /* ObserveSingleOn.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA521B944DE3004D233E /* ObserveSingleOn.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DACA1B944DE3004D233E /* Producer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA531B944DE3004D233E /* Producer.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DACB1B944DE3004D233E /* Reduce.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA541B944DE3004D233E /* Reduce.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DACC1B944DE3004D233E /* RefCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA551B944DE3004D233E /* RefCount.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DACD1B944DE3004D233E /* Sample.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA561B944DE3004D233E /* Sample.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DACE1B944DE3004D233E /* Scan.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA571B944DE3004D233E /* Scan.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DACF1B944DE3004D233E /* Sink.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA581B944DE3004D233E /* Sink.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAD01B944DE3004D233E /* Skip.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA591B944DE3004D233E /* Skip.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAD11B944DE3004D233E /* StartWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA5A1B944DE3004D233E /* StartWith.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAD21B944DE3004D233E /* SubscribeOn.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA5B1B944DE3004D233E /* SubscribeOn.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAD31B944DE3004D233E /* Switch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA5C1B944DE3004D233E /* Switch.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAD41B944DE3004D233E /* Take.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA5D1B944DE3004D233E /* Take.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAD51B944DE3004D233E /* TakeUntil.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA5E1B944DE3004D233E /* TakeUntil.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAD61B944DE3004D233E /* TakeWhile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA5F1B944DE3004D233E /* TakeWhile.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAD71B944DE3004D233E /* Throttle.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA601B944DE3004D233E /* Throttle.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAD81B944DE3004D233E /* Timer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA611B944DE3004D233E /* Timer.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAD91B944DE3004D233E /* Zip+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA621B944DE3004D233E /* Zip+arity.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DADA1B944DE3004D233E /* Zip+arity.tt in Resources */ = {isa = PBXBuildFile; fileRef = C8C3DA631B944DE3004D233E /* Zip+arity.tt */; settings = {ASSET_TAGS = (); }; }; + C8C3DADB1B944DE3004D233E /* Zip+CollectionType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA641B944DE3004D233E /* Zip+CollectionType.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DADC1B944DE3004D233E /* Zip.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA651B944DE3004D233E /* Zip.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DADD1B944DE3004D233E /* Observable+Aggregate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA661B944DE3004D233E /* Observable+Aggregate.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DADE1B944DE3004D233E /* Observable+Binding.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA671B944DE3004D233E /* Observable+Binding.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DADF1B944DE3004D233E /* Observable+Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA681B944DE3004D233E /* Observable+Concurrency.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAE01B944DE3004D233E /* Observable+Creation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA691B944DE3004D233E /* Observable+Creation.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAE11B944DE4004D233E /* Observable+Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA6A1B944DE3004D233E /* Observable+Debug.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAE21B944DE4004D233E /* Observable+Multiple.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA6B1B944DE3004D233E /* Observable+Multiple.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAE31B944DE4004D233E /* Observable+Single.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA6C1B944DE3004D233E /* Observable+Single.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAE41B944DE4004D233E /* Observable+StandardSequenceOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA6D1B944DE3004D233E /* Observable+StandardSequenceOperators.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAE51B944DE4004D233E /* Observable+Time.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA6E1B944DE3004D233E /* Observable+Time.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAE61B944DE4004D233E /* ObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA6F1B944DE3004D233E /* ObservableType.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAE71B944DE4004D233E /* Observer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA701B944DE3004D233E /* Observer.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAE81B944DE4004D233E /* ObserverOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA711B944DE3004D233E /* ObserverOf.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAE91B944DE4004D233E /* AnonymousObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA731B944DE3004D233E /* AnonymousObserver.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAEA1B944DE4004D233E /* AutoDetachObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA741B944DE3004D233E /* AutoDetachObserver.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAEB1B944DE4004D233E /* DoneObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA751B944DE3004D233E /* DoneObserver.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAEC1B944DE4004D233E /* NopObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA761B944DE3004D233E /* NopObserver.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAED1B944DE4004D233E /* ObserverBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA771B944DE3004D233E /* ObserverBase.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAEE1B944DE4004D233E /* SafeObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA781B944DE3004D233E /* SafeObserver.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAEF1B944DE4004D233E /* ScheduledObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA791B944DE3004D233E /* ScheduledObserver.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAF01B944DE4004D233E /* TailRecursiveSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA7A1B944DE3004D233E /* TailRecursiveSink.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAF11B944DE4004D233E /* ObserverType+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA7B1B944DE3004D233E /* ObserverType+Extensions.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAF21B944DE4004D233E /* ObserverType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA7C1B944DE3004D233E /* ObserverType.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAF31B944DE4004D233E /* Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA7D1B944DE3004D233E /* Rx.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAF41B944DE4004D233E /* RxBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA7E1B944DE3004D233E /* RxBox.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAF51B944DE4004D233E /* RxResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA7F1B944DE3004D233E /* RxResult.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAF61B944DE4004D233E /* Scheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA801B944DE3004D233E /* Scheduler.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAF71B944DE4004D233E /* ConcurrentDispatchQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA821B944DE3004D233E /* ConcurrentDispatchQueueScheduler.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAF81B944DE4004D233E /* CurrentThreadScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA831B944DE3004D233E /* CurrentThreadScheduler.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAF91B944DE4004D233E /* DispatchQueueSchedulerPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA841B944DE3004D233E /* DispatchQueueSchedulerPriority.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAFA1B944DE4004D233E /* MainScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA851B944DE3004D233E /* MainScheduler.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAFB1B944DE4004D233E /* OperationQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA861B944DE3004D233E /* OperationQueueScheduler.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAFC1B944DE4004D233E /* RecursiveScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA871B944DE3004D233E /* RecursiveScheduler.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAFD1B944DE4004D233E /* Scheduler+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA881B944DE3004D233E /* Scheduler+Extensions.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAFE1B944DE4004D233E /* SchedulerServices+Emulation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA891B944DE3004D233E /* SchedulerServices+Emulation.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DAFF1B944DE4004D233E /* SerialDispatchQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA8A1B944DE3004D233E /* SerialDispatchQueueScheduler.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DB001B944DE4004D233E /* BehaviorSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA8C1B944DE3004D233E /* BehaviorSubject.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DB011B944DE4004D233E /* PublishSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA8D1B944DE3004D233E /* PublishSubject.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DB021B944DE4004D233E /* ReplaySubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA8E1B944DE3004D233E /* ReplaySubject.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DB031B944DE4004D233E /* SubjectType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA8F1B944DE3004D233E /* SubjectType.swift */; settings = {ASSET_TAGS = (); }; }; + C8C3DB041B944DE4004D233E /* Variable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C3DA901B944DE3004D233E /* Variable.swift */; settings = {ASSET_TAGS = (); }; }; C8C46DA81B47F7110020D71E /* CollectionViewImageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C46DA31B47F7110020D71E /* CollectionViewImageCell.swift */; }; C8C46DA91B47F7110020D71E /* WikipediaImageCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = C8C46DA41B47F7110020D71E /* WikipediaImageCell.xib */; }; C8C46DAA1B47F7110020D71E /* WikipediaSearchCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C46DA51B47F7110020D71E /* WikipediaSearchCell.swift */; }; @@ -343,117 +346,6 @@ C83367111AD029AE00C668A7 /* HtmlParsing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HtmlParsing.swift; sourceTree = ""; }; C83367121AD029AE00C668A7 /* ImageService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageService.swift; sourceTree = ""; }; C83367211AD029AE00C668A7 /* Wireframe.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Wireframe.swift; sourceTree = ""; }; - C836EB931B8A7A4500AB941D /* AnyObject+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AnyObject+Rx.swift"; sourceTree = ""; }; - C836EB941B8A7A4500AB941D /* Cancelable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Cancelable.swift; sourceTree = ""; }; - C836EB961B8A7A4500AB941D /* AsyncLock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsyncLock.swift; sourceTree = ""; }; - C836EB971B8A7A4500AB941D /* Lock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Lock.swift; sourceTree = ""; }; - C836EB981B8A7A4500AB941D /* ConnectableObservableType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConnectableObservableType.swift; sourceTree = ""; }; - C836EB9A1B8A7A4500AB941D /* Bag.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Bag.swift; sourceTree = ""; }; - C836EB9B1B8A7A4500AB941D /* InfiniteSequence.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InfiniteSequence.swift; sourceTree = ""; }; - C836EB9C1B8A7A4500AB941D /* Queue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Queue.swift; sourceTree = ""; }; - C836EB9D1B8A7A4500AB941D /* Disposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Disposable.swift; sourceTree = ""; }; - C836EB9F1B8A7A4500AB941D /* AnonymousDisposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnonymousDisposable.swift; sourceTree = ""; }; - C836EBA01B8A7A4500AB941D /* BinaryDisposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BinaryDisposable.swift; sourceTree = ""; }; - C836EBA11B8A7A4500AB941D /* BooleanDisposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BooleanDisposable.swift; sourceTree = ""; }; - C836EBA21B8A7A4500AB941D /* CompositeDisposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CompositeDisposable.swift; sourceTree = ""; }; - C836EBA31B8A7A4500AB941D /* DisposeBag.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DisposeBag.swift; sourceTree = ""; }; - C836EBA41B8A7A4500AB941D /* DisposeBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DisposeBase.swift; sourceTree = ""; }; - C836EBA51B8A7A4500AB941D /* NAryDisposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NAryDisposable.swift; sourceTree = ""; }; - C836EBA61B8A7A4500AB941D /* NAryDisposable.tt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = NAryDisposable.tt; sourceTree = ""; }; - C836EBA71B8A7A4500AB941D /* NopDisposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NopDisposable.swift; sourceTree = ""; }; - C836EBA81B8A7A4500AB941D /* ScheduledDisposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScheduledDisposable.swift; sourceTree = ""; }; - C836EBA91B8A7A4500AB941D /* ScopedDispose.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScopedDispose.swift; sourceTree = ""; }; - C836EBAA1B8A7A4500AB941D /* SerialDisposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SerialDisposable.swift; sourceTree = ""; }; - C836EBAB1B8A7A4500AB941D /* SingleAssignmentDisposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SingleAssignmentDisposable.swift; sourceTree = ""; }; - C836EBAC1B8A7A4500AB941D /* StableCompositeDisposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StableCompositeDisposable.swift; sourceTree = ""; }; - C836EBAD1B8A7A4500AB941D /* TernaryDisposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TernaryDisposable.swift; sourceTree = ""; }; - C836EBAE1B8A7A4500AB941D /* Error.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Error.swift; sourceTree = ""; }; - C836EBAF1B8A7A4500AB941D /* Event.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Event.swift; sourceTree = ""; }; - C836EBB01B8A7A4500AB941D /* ImmediateScheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImmediateScheduler.swift; sourceTree = ""; }; - C836EBB11B8A7A4500AB941D /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C836EBB21B8A7A4500AB941D /* Observable+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+Extensions.swift"; sourceTree = ""; }; - C836EBB31B8A7A4500AB941D /* Observable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Observable.swift; sourceTree = ""; }; - C836EBB61B8A7A4500AB941D /* Amb.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Amb.swift; sourceTree = ""; }; - C836EBB71B8A7A4500AB941D /* AnonymousObservable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnonymousObservable.swift; sourceTree = ""; }; - C836EBB81B8A7A4500AB941D /* AsObservable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsObservable.swift; sourceTree = ""; }; - C836EBB91B8A7A4500AB941D /* Catch.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Catch.swift; sourceTree = ""; }; - C836EBBA1B8A7A4500AB941D /* CombineLatest+arity.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CombineLatest+arity.swift"; sourceTree = ""; }; - C836EBBB1B8A7A4500AB941D /* CombineLatest+arity.tt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "CombineLatest+arity.tt"; sourceTree = ""; }; - C836EBBC1B8A7A4500AB941D /* CombineLatest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CombineLatest.swift; sourceTree = ""; }; - C836EBBD1B8A7A4500AB941D /* Concat.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Concat.swift; sourceTree = ""; }; - C836EBBF1B8A7A4500AB941D /* ConnectableObservable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConnectableObservable.swift; sourceTree = ""; }; - C836EBC01B8A7A4500AB941D /* Debug.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Debug.swift; sourceTree = ""; }; - C836EBC11B8A7A4500AB941D /* Deferred.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Deferred.swift; sourceTree = ""; }; - C836EBC21B8A7A4500AB941D /* DelaySubscription.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DelaySubscription.swift; sourceTree = ""; }; - C836EBC31B8A7A4500AB941D /* DistinctUntilChanged.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DistinctUntilChanged.swift; sourceTree = ""; }; - C836EBC41B8A7A4500AB941D /* Do.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Do.swift; sourceTree = ""; }; - C836EBC51B8A7A4500AB941D /* Filter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Filter.swift; sourceTree = ""; }; - C836EBC61B8A7A4500AB941D /* FlatMap.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FlatMap.swift; sourceTree = ""; }; - C836EBC71B8A7A4500AB941D /* Map.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Map.swift; sourceTree = ""; }; - C836EBC81B8A7A4500AB941D /* Merge.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Merge.swift; sourceTree = ""; }; - C836EBC91B8A7A4500AB941D /* Multicast.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Multicast.swift; sourceTree = ""; }; - C836EBCA1B8A7A4500AB941D /* ObservableBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObservableBase.swift; sourceTree = ""; }; - C836EBCB1B8A7A4500AB941D /* ObserveOn.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObserveOn.swift; sourceTree = ""; }; - C836EBCC1B8A7A4500AB941D /* ObserveOnSerialDispatchQueue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObserveOnSerialDispatchQueue.swift; sourceTree = ""; }; - C836EBCD1B8A7A4500AB941D /* ObserveSingleOn.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObserveSingleOn.swift; sourceTree = ""; }; - C836EBCE1B8A7A4500AB941D /* Producer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Producer.swift; sourceTree = ""; }; - C836EBCF1B8A7A4500AB941D /* Reduce.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Reduce.swift; sourceTree = ""; }; - C836EBD01B8A7A4500AB941D /* RefCount.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RefCount.swift; sourceTree = ""; }; - C836EBD11B8A7A4500AB941D /* Sample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Sample.swift; sourceTree = ""; }; - C836EBD21B8A7A4500AB941D /* Scan.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Scan.swift; sourceTree = ""; }; - C836EBD31B8A7A4500AB941D /* Sink.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Sink.swift; sourceTree = ""; }; - C836EBD41B8A7A4500AB941D /* Skip.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Skip.swift; sourceTree = ""; }; - C836EBD51B8A7A4500AB941D /* StartWith.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StartWith.swift; sourceTree = ""; }; - C836EBD61B8A7A4500AB941D /* SubscribeOn.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SubscribeOn.swift; sourceTree = ""; }; - C836EBD71B8A7A4500AB941D /* Switch.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Switch.swift; sourceTree = ""; }; - C836EBD81B8A7A4500AB941D /* Take.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Take.swift; sourceTree = ""; }; - C836EBD91B8A7A4500AB941D /* TakeUntil.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TakeUntil.swift; sourceTree = ""; }; - C836EBDA1B8A7A4500AB941D /* TakeWhile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TakeWhile.swift; sourceTree = ""; }; - C836EBDB1B8A7A4500AB941D /* Throttle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Throttle.swift; sourceTree = ""; }; - C836EBDC1B8A7A4500AB941D /* Timer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Timer.swift; sourceTree = ""; }; - C836EBDD1B8A7A4500AB941D /* Zip+arity.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Zip+arity.swift"; sourceTree = ""; }; - C836EBDE1B8A7A4500AB941D /* Zip+arity.tt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "Zip+arity.tt"; sourceTree = ""; }; - C836EBDF1B8A7A4500AB941D /* Zip.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Zip.swift; sourceTree = ""; }; - C836EBE01B8A7A4500AB941D /* Observable+Aggregate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+Aggregate.swift"; sourceTree = ""; }; - C836EBE11B8A7A4500AB941D /* Observable+Binding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+Binding.swift"; sourceTree = ""; }; - C836EBE21B8A7A4500AB941D /* Observable+Concurrency.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+Concurrency.swift"; sourceTree = ""; }; - C836EBE31B8A7A4500AB941D /* Observable+Creation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+Creation.swift"; sourceTree = ""; }; - C836EBE41B8A7A4500AB941D /* Observable+Debug.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+Debug.swift"; sourceTree = ""; }; - C836EBE51B8A7A4500AB941D /* Observable+Multiple.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+Multiple.swift"; sourceTree = ""; }; - C836EBE61B8A7A4500AB941D /* Observable+Single.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+Single.swift"; sourceTree = ""; }; - C836EBE71B8A7A4500AB941D /* Observable+StandardSequenceOperators.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+StandardSequenceOperators.swift"; sourceTree = ""; }; - C836EBE81B8A7A4500AB941D /* Observable+Time.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+Time.swift"; sourceTree = ""; }; - C836EBE91B8A7A4500AB941D /* ObservableType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObservableType.swift; sourceTree = ""; }; - C836EBEA1B8A7A4500AB941D /* Observer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Observer.swift; sourceTree = ""; }; - C836EBEB1B8A7A4500AB941D /* ObserverOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObserverOf.swift; sourceTree = ""; }; - C836EBED1B8A7A4500AB941D /* AnonymousObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnonymousObserver.swift; sourceTree = ""; }; - C836EBEE1B8A7A4500AB941D /* AutoDetachObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AutoDetachObserver.swift; sourceTree = ""; }; - C836EBEF1B8A7A4500AB941D /* DoneObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DoneObserver.swift; sourceTree = ""; }; - C836EBF01B8A7A4500AB941D /* NopObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NopObserver.swift; sourceTree = ""; }; - C836EBF11B8A7A4500AB941D /* ObserverBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObserverBase.swift; sourceTree = ""; }; - C836EBF21B8A7A4500AB941D /* SafeObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SafeObserver.swift; sourceTree = ""; }; - C836EBF31B8A7A4500AB941D /* ScheduledObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScheduledObserver.swift; sourceTree = ""; }; - C836EBF41B8A7A4500AB941D /* TailRecursiveSink.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TailRecursiveSink.swift; sourceTree = ""; }; - C836EBF51B8A7A4500AB941D /* ObserverType+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ObserverType+Extensions.swift"; sourceTree = ""; }; - C836EBF61B8A7A4500AB941D /* ObserverType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObserverType.swift; sourceTree = ""; }; - C836EBF71B8A7A4500AB941D /* PeriodicScheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeriodicScheduler.swift; sourceTree = ""; }; - C836EBFA1B8A7A4500AB941D /* Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Rx.swift; sourceTree = ""; }; - C836EBFB1B8A7A4500AB941D /* RxBox.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxBox.swift; sourceTree = ""; }; - C836EBFC1B8A7A4500AB941D /* RxResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxResult.swift; sourceTree = ""; }; - C836EBFE1B8A7A4500AB941D /* Scheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Scheduler.swift; sourceTree = ""; }; - C836EC001B8A7A4500AB941D /* ConcurrentDispatchQueueScheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConcurrentDispatchQueueScheduler.swift; sourceTree = ""; }; - C836EC011B8A7A4500AB941D /* DispatchQueueSchedulerPriority.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DispatchQueueSchedulerPriority.swift; sourceTree = ""; }; - C836EC021B8A7A4500AB941D /* MainScheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainScheduler.swift; sourceTree = ""; }; - C836EC031B8A7A4500AB941D /* OperationQueueScheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OperationQueueScheduler.swift; sourceTree = ""; }; - C836EC041B8A7A4500AB941D /* RecursiveScheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecursiveScheduler.swift; sourceTree = ""; }; - C836EC051B8A7A4500AB941D /* Scheduler+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Scheduler+Extensions.swift"; sourceTree = ""; }; - C836EC061B8A7A4500AB941D /* SchedulerServices+Emulation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SchedulerServices+Emulation.swift"; sourceTree = ""; }; - C836EC071B8A7A4500AB941D /* SerialDispatchQueueScheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SerialDispatchQueueScheduler.swift; sourceTree = ""; }; - C836EC091B8A7A4500AB941D /* BehaviorSubject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BehaviorSubject.swift; sourceTree = ""; }; - C836EC0A1B8A7A4500AB941D /* PublishSubject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PublishSubject.swift; sourceTree = ""; }; - C836EC0B1B8A7A4500AB941D /* ReplaySubject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReplaySubject.swift; sourceTree = ""; }; - C836EC0C1B8A7A4500AB941D /* SubjectType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SubjectType.swift; sourceTree = ""; }; - C836EC0D1B8A7A4500AB941D /* Variable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Variable.swift; sourceTree = ""; }; C836EC801B8A7AA600AB941D /* _RX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _RX.h; sourceTree = ""; }; C836EC811B8A7AA600AB941D /* _RX.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = _RX.m; sourceTree = ""; }; C836EC821B8A7AA600AB941D /* _RXDelegateProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _RXDelegateProxy.h; sourceTree = ""; }; @@ -544,8 +436,122 @@ C8A468EF1B8A8BD000BF917B /* RxBlocking.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxBlocking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C8A57F731B40AF7C00D5570A /* Random.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Random.xcdatamodel; sourceTree = ""; }; C8AF26F11B49ABD300131C03 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; - C8C3D9FB1B935D1E004D233E /* CombineLatest+CollectionType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CombineLatest+CollectionType.swift"; sourceTree = ""; }; - C8C3DA001B936C11004D233E /* Zip+CollectionType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Zip+CollectionType.swift"; sourceTree = ""; }; + C8C3DA151B944DE3004D233E /* AnyObject+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AnyObject+Rx.swift"; sourceTree = ""; }; + C8C3DA161B944DE3004D233E /* Cancelable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Cancelable.swift; sourceTree = ""; }; + C8C3DA181B944DE3004D233E /* AsyncLock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsyncLock.swift; sourceTree = ""; }; + C8C3DA191B944DE3004D233E /* Lock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Lock.swift; sourceTree = ""; }; + C8C3DA1A1B944DE3004D233E /* ConnectableObservableType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConnectableObservableType.swift; sourceTree = ""; }; + C8C3DA1C1B944DE3004D233E /* Bag.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Bag.swift; sourceTree = ""; }; + C8C3DA1D1B944DE3004D233E /* InfiniteSequence.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InfiniteSequence.swift; sourceTree = ""; }; + C8C3DA1E1B944DE3004D233E /* Queue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Queue.swift; sourceTree = ""; }; + C8C3DA1F1B944DE3004D233E /* Disposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Disposable.swift; sourceTree = ""; }; + C8C3DA211B944DE3004D233E /* AnonymousDisposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnonymousDisposable.swift; sourceTree = ""; }; + C8C3DA221B944DE3004D233E /* BinaryDisposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BinaryDisposable.swift; sourceTree = ""; }; + C8C3DA231B944DE3004D233E /* BooleanDisposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BooleanDisposable.swift; sourceTree = ""; }; + C8C3DA241B944DE3004D233E /* CompositeDisposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CompositeDisposable.swift; sourceTree = ""; }; + C8C3DA251B944DE3004D233E /* DisposeBag.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DisposeBag.swift; sourceTree = ""; }; + C8C3DA261B944DE3004D233E /* DisposeBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DisposeBase.swift; sourceTree = ""; }; + C8C3DA271B944DE3004D233E /* NAryDisposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NAryDisposable.swift; sourceTree = ""; }; + C8C3DA281B944DE3004D233E /* NAryDisposable.tt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = NAryDisposable.tt; sourceTree = ""; }; + C8C3DA291B944DE3004D233E /* NopDisposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NopDisposable.swift; sourceTree = ""; }; + C8C3DA2A1B944DE3004D233E /* ScheduledDisposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScheduledDisposable.swift; sourceTree = ""; }; + C8C3DA2B1B944DE3004D233E /* ScopedDispose.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScopedDispose.swift; sourceTree = ""; }; + C8C3DA2C1B944DE3004D233E /* SerialDisposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SerialDisposable.swift; sourceTree = ""; }; + C8C3DA2D1B944DE3004D233E /* SingleAssignmentDisposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SingleAssignmentDisposable.swift; sourceTree = ""; }; + C8C3DA2E1B944DE3004D233E /* StableCompositeDisposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StableCompositeDisposable.swift; sourceTree = ""; }; + C8C3DA2F1B944DE3004D233E /* TernaryDisposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TernaryDisposable.swift; sourceTree = ""; }; + C8C3DA301B944DE3004D233E /* Error.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Error.swift; sourceTree = ""; }; + C8C3DA311B944DE3004D233E /* Event.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Event.swift; sourceTree = ""; }; + C8C3DA321B944DE3004D233E /* ImmediateScheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImmediateScheduler.swift; sourceTree = ""; }; + C8C3DA331B944DE3004D233E /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + C8C3DA341B944DE3004D233E /* Observable+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+Extensions.swift"; sourceTree = ""; }; + C8C3DA351B944DE3004D233E /* Observable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Observable.swift; sourceTree = ""; }; + C8C3DA381B944DE3004D233E /* Amb.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Amb.swift; sourceTree = ""; }; + C8C3DA391B944DE3004D233E /* AnonymousObservable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnonymousObservable.swift; sourceTree = ""; }; + C8C3DA3A1B944DE3004D233E /* AsObservable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsObservable.swift; sourceTree = ""; }; + C8C3DA3B1B944DE3004D233E /* Catch.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Catch.swift; sourceTree = ""; }; + C8C3DA3C1B944DE3004D233E /* CombineLatest+arity.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CombineLatest+arity.swift"; sourceTree = ""; }; + C8C3DA3D1B944DE3004D233E /* CombineLatest+arity.tt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "CombineLatest+arity.tt"; sourceTree = ""; }; + C8C3DA3E1B944DE3004D233E /* CombineLatest+CollectionType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CombineLatest+CollectionType.swift"; sourceTree = ""; }; + C8C3DA3F1B944DE3004D233E /* CombineLatest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CombineLatest.swift; sourceTree = ""; }; + C8C3DA401B944DE3004D233E /* Concat.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Concat.swift; sourceTree = ""; }; + C8C3DA411B944DE3004D233E /* ConnectableObservable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConnectableObservable.swift; sourceTree = ""; }; + C8C3DA421B944DE3004D233E /* Debug.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Debug.swift; sourceTree = ""; }; + C8C3DA431B944DE3004D233E /* Deferred.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Deferred.swift; sourceTree = ""; }; + C8C3DA441B944DE3004D233E /* DelaySubscription.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DelaySubscription.swift; sourceTree = ""; }; + C8C3DA451B944DE3004D233E /* DistinctUntilChanged.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DistinctUntilChanged.swift; sourceTree = ""; }; + C8C3DA461B944DE3004D233E /* Do.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Do.swift; sourceTree = ""; }; + C8C3DA471B944DE3004D233E /* Empty.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Empty.swift; sourceTree = ""; }; + C8C3DA481B944DE3004D233E /* FailWith.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FailWith.swift; sourceTree = ""; }; + C8C3DA491B944DE3004D233E /* Filter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Filter.swift; sourceTree = ""; }; + C8C3DA4A1B944DE3004D233E /* FlatMap.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FlatMap.swift; sourceTree = ""; }; + C8C3DA4B1B944DE3004D233E /* Just.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Just.swift; sourceTree = ""; }; + C8C3DA4C1B944DE3004D233E /* Map.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Map.swift; sourceTree = ""; }; + C8C3DA4D1B944DE3004D233E /* Merge.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Merge.swift; sourceTree = ""; }; + C8C3DA4E1B944DE3004D233E /* Multicast.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Multicast.swift; sourceTree = ""; }; + C8C3DA4F1B944DE3004D233E /* Never.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Never.swift; sourceTree = ""; }; + C8C3DA501B944DE3004D233E /* ObserveOn.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObserveOn.swift; sourceTree = ""; }; + C8C3DA511B944DE3004D233E /* ObserveOnSerialDispatchQueue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObserveOnSerialDispatchQueue.swift; sourceTree = ""; }; + C8C3DA521B944DE3004D233E /* ObserveSingleOn.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObserveSingleOn.swift; sourceTree = ""; }; + C8C3DA531B944DE3004D233E /* Producer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Producer.swift; sourceTree = ""; }; + C8C3DA541B944DE3004D233E /* Reduce.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Reduce.swift; sourceTree = ""; }; + C8C3DA551B944DE3004D233E /* RefCount.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RefCount.swift; sourceTree = ""; }; + C8C3DA561B944DE3004D233E /* Sample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Sample.swift; sourceTree = ""; }; + C8C3DA571B944DE3004D233E /* Scan.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Scan.swift; sourceTree = ""; }; + C8C3DA581B944DE3004D233E /* Sink.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Sink.swift; sourceTree = ""; }; + C8C3DA591B944DE3004D233E /* Skip.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Skip.swift; sourceTree = ""; }; + C8C3DA5A1B944DE3004D233E /* StartWith.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StartWith.swift; sourceTree = ""; }; + C8C3DA5B1B944DE3004D233E /* SubscribeOn.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SubscribeOn.swift; sourceTree = ""; }; + C8C3DA5C1B944DE3004D233E /* Switch.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Switch.swift; sourceTree = ""; }; + C8C3DA5D1B944DE3004D233E /* Take.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Take.swift; sourceTree = ""; }; + C8C3DA5E1B944DE3004D233E /* TakeUntil.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TakeUntil.swift; sourceTree = ""; }; + C8C3DA5F1B944DE3004D233E /* TakeWhile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TakeWhile.swift; sourceTree = ""; }; + C8C3DA601B944DE3004D233E /* Throttle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Throttle.swift; sourceTree = ""; }; + C8C3DA611B944DE3004D233E /* Timer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Timer.swift; sourceTree = ""; }; + C8C3DA621B944DE3004D233E /* Zip+arity.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Zip+arity.swift"; sourceTree = ""; }; + C8C3DA631B944DE3004D233E /* Zip+arity.tt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "Zip+arity.tt"; sourceTree = ""; }; + C8C3DA641B944DE3004D233E /* Zip+CollectionType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Zip+CollectionType.swift"; sourceTree = ""; }; + C8C3DA651B944DE3004D233E /* Zip.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Zip.swift; sourceTree = ""; }; + C8C3DA661B944DE3004D233E /* Observable+Aggregate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+Aggregate.swift"; sourceTree = ""; }; + C8C3DA671B944DE3004D233E /* Observable+Binding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+Binding.swift"; sourceTree = ""; }; + C8C3DA681B944DE3004D233E /* Observable+Concurrency.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+Concurrency.swift"; sourceTree = ""; }; + C8C3DA691B944DE3004D233E /* Observable+Creation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+Creation.swift"; sourceTree = ""; }; + C8C3DA6A1B944DE3004D233E /* Observable+Debug.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+Debug.swift"; sourceTree = ""; }; + C8C3DA6B1B944DE3004D233E /* Observable+Multiple.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+Multiple.swift"; sourceTree = ""; }; + C8C3DA6C1B944DE3004D233E /* Observable+Single.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+Single.swift"; sourceTree = ""; }; + C8C3DA6D1B944DE3004D233E /* Observable+StandardSequenceOperators.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+StandardSequenceOperators.swift"; sourceTree = ""; }; + C8C3DA6E1B944DE3004D233E /* Observable+Time.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Observable+Time.swift"; sourceTree = ""; }; + C8C3DA6F1B944DE3004D233E /* ObservableType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObservableType.swift; sourceTree = ""; }; + C8C3DA701B944DE3004D233E /* Observer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Observer.swift; sourceTree = ""; }; + C8C3DA711B944DE3004D233E /* ObserverOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObserverOf.swift; sourceTree = ""; }; + C8C3DA731B944DE3004D233E /* AnonymousObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnonymousObserver.swift; sourceTree = ""; }; + C8C3DA741B944DE3004D233E /* AutoDetachObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AutoDetachObserver.swift; sourceTree = ""; }; + C8C3DA751B944DE3004D233E /* DoneObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DoneObserver.swift; sourceTree = ""; }; + C8C3DA761B944DE3004D233E /* NopObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NopObserver.swift; sourceTree = ""; }; + C8C3DA771B944DE3004D233E /* ObserverBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObserverBase.swift; sourceTree = ""; }; + C8C3DA781B944DE3004D233E /* SafeObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SafeObserver.swift; sourceTree = ""; }; + C8C3DA791B944DE3004D233E /* ScheduledObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScheduledObserver.swift; sourceTree = ""; }; + C8C3DA7A1B944DE3004D233E /* TailRecursiveSink.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TailRecursiveSink.swift; sourceTree = ""; }; + C8C3DA7B1B944DE3004D233E /* ObserverType+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ObserverType+Extensions.swift"; sourceTree = ""; }; + C8C3DA7C1B944DE3004D233E /* ObserverType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObserverType.swift; sourceTree = ""; }; + C8C3DA7D1B944DE3004D233E /* Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Rx.swift; sourceTree = ""; }; + C8C3DA7E1B944DE3004D233E /* RxBox.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxBox.swift; sourceTree = ""; }; + C8C3DA7F1B944DE3004D233E /* RxResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxResult.swift; sourceTree = ""; }; + C8C3DA801B944DE3004D233E /* Scheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Scheduler.swift; sourceTree = ""; }; + C8C3DA821B944DE3004D233E /* ConcurrentDispatchQueueScheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConcurrentDispatchQueueScheduler.swift; sourceTree = ""; }; + C8C3DA831B944DE3004D233E /* CurrentThreadScheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CurrentThreadScheduler.swift; sourceTree = ""; }; + C8C3DA841B944DE3004D233E /* DispatchQueueSchedulerPriority.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DispatchQueueSchedulerPriority.swift; sourceTree = ""; }; + C8C3DA851B944DE3004D233E /* MainScheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainScheduler.swift; sourceTree = ""; }; + C8C3DA861B944DE3004D233E /* OperationQueueScheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OperationQueueScheduler.swift; sourceTree = ""; }; + C8C3DA871B944DE3004D233E /* RecursiveScheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecursiveScheduler.swift; sourceTree = ""; }; + C8C3DA881B944DE3004D233E /* Scheduler+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Scheduler+Extensions.swift"; sourceTree = ""; }; + C8C3DA891B944DE3004D233E /* SchedulerServices+Emulation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SchedulerServices+Emulation.swift"; sourceTree = ""; }; + C8C3DA8A1B944DE3004D233E /* SerialDispatchQueueScheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SerialDispatchQueueScheduler.swift; sourceTree = ""; }; + C8C3DA8C1B944DE3004D233E /* BehaviorSubject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BehaviorSubject.swift; sourceTree = ""; }; + C8C3DA8D1B944DE3004D233E /* PublishSubject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PublishSubject.swift; sourceTree = ""; }; + C8C3DA8E1B944DE3004D233E /* ReplaySubject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReplaySubject.swift; sourceTree = ""; }; + C8C3DA8F1B944DE3004D233E /* SubjectType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SubjectType.swift; sourceTree = ""; }; + C8C3DA901B944DE3004D233E /* Variable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Variable.swift; sourceTree = ""; }; C8C46DA31B47F7110020D71E /* CollectionViewImageCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionViewImageCell.swift; sourceTree = ""; }; C8C46DA41B47F7110020D71E /* WikipediaImageCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = WikipediaImageCell.xib; sourceTree = ""; }; C8C46DA51B47F7110020D71E /* WikipediaSearchCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WikipediaSearchCell.swift; sourceTree = ""; }; @@ -713,197 +719,12 @@ C836EB911B8A7A3700AB941D /* NoModule */ = { isa = PBXGroup; children = ( + C8C3DA141B944DE3004D233E /* RxSwift */, C836EC7E1B8A7AA600AB941D /* RxCocoa */, - C836EB921B8A7A4500AB941D /* RxSwift */, ); name = NoModule; sourceTree = ""; }; - C836EB921B8A7A4500AB941D /* RxSwift */ = { - isa = PBXGroup; - children = ( - C836EB931B8A7A4500AB941D /* AnyObject+Rx.swift */, - C836EB941B8A7A4500AB941D /* Cancelable.swift */, - C836EB951B8A7A4500AB941D /* Concurrency */, - C836EB981B8A7A4500AB941D /* ConnectableObservableType.swift */, - C836EB991B8A7A4500AB941D /* DataStructures */, - C836EB9D1B8A7A4500AB941D /* Disposable.swift */, - C836EB9E1B8A7A4500AB941D /* Disposables */, - C836EBAE1B8A7A4500AB941D /* Error.swift */, - C836EBAF1B8A7A4500AB941D /* Event.swift */, - C836EBB01B8A7A4500AB941D /* ImmediateScheduler.swift */, - C836EBB11B8A7A4500AB941D /* Info.plist */, - C836EBB21B8A7A4500AB941D /* Observable+Extensions.swift */, - C836EBB31B8A7A4500AB941D /* Observable.swift */, - C836EBB41B8A7A4500AB941D /* Observables */, - C836EBE91B8A7A4500AB941D /* ObservableType.swift */, - C836EBEA1B8A7A4500AB941D /* Observer.swift */, - C836EBEB1B8A7A4500AB941D /* ObserverOf.swift */, - C836EBEC1B8A7A4500AB941D /* Observers */, - C836EBF51B8A7A4500AB941D /* ObserverType+Extensions.swift */, - C836EBF61B8A7A4500AB941D /* ObserverType.swift */, - C836EBF71B8A7A4500AB941D /* PeriodicScheduler.swift */, - C836EBFA1B8A7A4500AB941D /* Rx.swift */, - C836EBFB1B8A7A4500AB941D /* RxBox.swift */, - C836EBFC1B8A7A4500AB941D /* RxResult.swift */, - C836EBFE1B8A7A4500AB941D /* Scheduler.swift */, - C836EBFF1B8A7A4500AB941D /* Schedulers */, - C836EC081B8A7A4500AB941D /* Subjects */, - ); - name = RxSwift; - path = ../RxSwift; - sourceTree = ""; - }; - C836EB951B8A7A4500AB941D /* Concurrency */ = { - isa = PBXGroup; - children = ( - C836EB961B8A7A4500AB941D /* AsyncLock.swift */, - C836EB971B8A7A4500AB941D /* Lock.swift */, - ); - path = Concurrency; - sourceTree = ""; - }; - C836EB991B8A7A4500AB941D /* DataStructures */ = { - isa = PBXGroup; - children = ( - C836EB9A1B8A7A4500AB941D /* Bag.swift */, - C836EB9B1B8A7A4500AB941D /* InfiniteSequence.swift */, - C836EB9C1B8A7A4500AB941D /* Queue.swift */, - ); - path = DataStructures; - sourceTree = ""; - }; - C836EB9E1B8A7A4500AB941D /* Disposables */ = { - isa = PBXGroup; - children = ( - C836EB9F1B8A7A4500AB941D /* AnonymousDisposable.swift */, - C836EBA01B8A7A4500AB941D /* BinaryDisposable.swift */, - C836EBA11B8A7A4500AB941D /* BooleanDisposable.swift */, - C836EBA21B8A7A4500AB941D /* CompositeDisposable.swift */, - C836EBA31B8A7A4500AB941D /* DisposeBag.swift */, - C836EBA41B8A7A4500AB941D /* DisposeBase.swift */, - C836EBA51B8A7A4500AB941D /* NAryDisposable.swift */, - C836EBA61B8A7A4500AB941D /* NAryDisposable.tt */, - C836EBA71B8A7A4500AB941D /* NopDisposable.swift */, - C836EBA81B8A7A4500AB941D /* ScheduledDisposable.swift */, - C836EBA91B8A7A4500AB941D /* ScopedDispose.swift */, - C836EBAA1B8A7A4500AB941D /* SerialDisposable.swift */, - C836EBAB1B8A7A4500AB941D /* SingleAssignmentDisposable.swift */, - C836EBAC1B8A7A4500AB941D /* StableCompositeDisposable.swift */, - C836EBAD1B8A7A4500AB941D /* TernaryDisposable.swift */, - ); - path = Disposables; - sourceTree = ""; - }; - C836EBB41B8A7A4500AB941D /* Observables */ = { - isa = PBXGroup; - children = ( - C836EBB51B8A7A4500AB941D /* Implementations */, - C836EBE01B8A7A4500AB941D /* Observable+Aggregate.swift */, - C836EBE11B8A7A4500AB941D /* Observable+Binding.swift */, - C836EBE21B8A7A4500AB941D /* Observable+Concurrency.swift */, - C836EBE31B8A7A4500AB941D /* Observable+Creation.swift */, - C836EBE41B8A7A4500AB941D /* Observable+Debug.swift */, - C836EBE51B8A7A4500AB941D /* Observable+Multiple.swift */, - C836EBE61B8A7A4500AB941D /* Observable+Single.swift */, - C836EBE71B8A7A4500AB941D /* Observable+StandardSequenceOperators.swift */, - C836EBE81B8A7A4500AB941D /* Observable+Time.swift */, - ); - path = Observables; - sourceTree = ""; - }; - C836EBB51B8A7A4500AB941D /* Implementations */ = { - isa = PBXGroup; - children = ( - C836EBB61B8A7A4500AB941D /* Amb.swift */, - C836EBB71B8A7A4500AB941D /* AnonymousObservable.swift */, - C836EBB81B8A7A4500AB941D /* AsObservable.swift */, - C836EBB91B8A7A4500AB941D /* Catch.swift */, - C836EBBC1B8A7A4500AB941D /* CombineLatest.swift */, - C836EBBA1B8A7A4500AB941D /* CombineLatest+arity.swift */, - C836EBBB1B8A7A4500AB941D /* CombineLatest+arity.tt */, - C8C3D9FB1B935D1E004D233E /* CombineLatest+CollectionType.swift */, - C836EBBD1B8A7A4500AB941D /* Concat.swift */, - C836EBBF1B8A7A4500AB941D /* ConnectableObservable.swift */, - C836EBC01B8A7A4500AB941D /* Debug.swift */, - C836EBC11B8A7A4500AB941D /* Deferred.swift */, - C836EBC21B8A7A4500AB941D /* DelaySubscription.swift */, - C836EBC31B8A7A4500AB941D /* DistinctUntilChanged.swift */, - C836EBC41B8A7A4500AB941D /* Do.swift */, - C836EBC51B8A7A4500AB941D /* Filter.swift */, - C836EBC61B8A7A4500AB941D /* FlatMap.swift */, - C836EBC71B8A7A4500AB941D /* Map.swift */, - C836EBC81B8A7A4500AB941D /* Merge.swift */, - C836EBC91B8A7A4500AB941D /* Multicast.swift */, - C836EBCA1B8A7A4500AB941D /* ObservableBase.swift */, - C836EBCB1B8A7A4500AB941D /* ObserveOn.swift */, - C836EBCC1B8A7A4500AB941D /* ObserveOnSerialDispatchQueue.swift */, - C836EBCD1B8A7A4500AB941D /* ObserveSingleOn.swift */, - C836EBCE1B8A7A4500AB941D /* Producer.swift */, - C836EBCF1B8A7A4500AB941D /* Reduce.swift */, - C836EBD01B8A7A4500AB941D /* RefCount.swift */, - C836EBD11B8A7A4500AB941D /* Sample.swift */, - C836EBD21B8A7A4500AB941D /* Scan.swift */, - C836EBD31B8A7A4500AB941D /* Sink.swift */, - C836EBD41B8A7A4500AB941D /* Skip.swift */, - C836EBD51B8A7A4500AB941D /* StartWith.swift */, - C836EBD61B8A7A4500AB941D /* SubscribeOn.swift */, - C836EBD71B8A7A4500AB941D /* Switch.swift */, - C836EBD81B8A7A4500AB941D /* Take.swift */, - C836EBD91B8A7A4500AB941D /* TakeUntil.swift */, - C836EBDA1B8A7A4500AB941D /* TakeWhile.swift */, - C836EBDB1B8A7A4500AB941D /* Throttle.swift */, - C836EBDC1B8A7A4500AB941D /* Timer.swift */, - C836EBDF1B8A7A4500AB941D /* Zip.swift */, - C836EBDD1B8A7A4500AB941D /* Zip+arity.swift */, - C836EBDE1B8A7A4500AB941D /* Zip+arity.tt */, - C8C3DA001B936C11004D233E /* Zip+CollectionType.swift */, - ); - path = Implementations; - sourceTree = ""; - }; - C836EBEC1B8A7A4500AB941D /* Observers */ = { - isa = PBXGroup; - children = ( - C836EBED1B8A7A4500AB941D /* AnonymousObserver.swift */, - C836EBEE1B8A7A4500AB941D /* AutoDetachObserver.swift */, - C836EBEF1B8A7A4500AB941D /* DoneObserver.swift */, - C836EBF01B8A7A4500AB941D /* NopObserver.swift */, - C836EBF11B8A7A4500AB941D /* ObserverBase.swift */, - C836EBF21B8A7A4500AB941D /* SafeObserver.swift */, - C836EBF31B8A7A4500AB941D /* ScheduledObserver.swift */, - C836EBF41B8A7A4500AB941D /* TailRecursiveSink.swift */, - ); - path = Observers; - sourceTree = ""; - }; - C836EBFF1B8A7A4500AB941D /* Schedulers */ = { - isa = PBXGroup; - children = ( - C836EC001B8A7A4500AB941D /* ConcurrentDispatchQueueScheduler.swift */, - C836EC011B8A7A4500AB941D /* DispatchQueueSchedulerPriority.swift */, - C836EC021B8A7A4500AB941D /* MainScheduler.swift */, - C836EC031B8A7A4500AB941D /* OperationQueueScheduler.swift */, - C836EC041B8A7A4500AB941D /* RecursiveScheduler.swift */, - C836EC051B8A7A4500AB941D /* Scheduler+Extensions.swift */, - C836EC061B8A7A4500AB941D /* SchedulerServices+Emulation.swift */, - C836EC071B8A7A4500AB941D /* SerialDispatchQueueScheduler.swift */, - ); - path = Schedulers; - sourceTree = ""; - }; - C836EC081B8A7A4500AB941D /* Subjects */ = { - isa = PBXGroup; - children = ( - C836EC091B8A7A4500AB941D /* BehaviorSubject.swift */, - C836EC0A1B8A7A4500AB941D /* PublishSubject.swift */, - C836EC0B1B8A7A4500AB941D /* ReplaySubject.swift */, - C836EC0C1B8A7A4500AB941D /* SubjectType.swift */, - C836EC0D1B8A7A4500AB941D /* Variable.swift */, - ); - path = Subjects; - sourceTree = ""; - }; C836EC7E1B8A7AA600AB941D /* RxCocoa */ = { isa = PBXGroup; children = ( @@ -1159,6 +980,194 @@ path = CoreData; sourceTree = ""; }; + C8C3DA141B944DE3004D233E /* RxSwift */ = { + isa = PBXGroup; + children = ( + C8C3DA151B944DE3004D233E /* AnyObject+Rx.swift */, + C8C3DA161B944DE3004D233E /* Cancelable.swift */, + C8C3DA171B944DE3004D233E /* Concurrency */, + C8C3DA1A1B944DE3004D233E /* ConnectableObservableType.swift */, + C8C3DA1B1B944DE3004D233E /* DataStructures */, + C8C3DA1F1B944DE3004D233E /* Disposable.swift */, + C8C3DA201B944DE3004D233E /* Disposables */, + C8C3DA301B944DE3004D233E /* Error.swift */, + C8C3DA311B944DE3004D233E /* Event.swift */, + C8C3DA321B944DE3004D233E /* ImmediateScheduler.swift */, + C8C3DA331B944DE3004D233E /* Info.plist */, + C8C3DA341B944DE3004D233E /* Observable+Extensions.swift */, + C8C3DA351B944DE3004D233E /* Observable.swift */, + C8C3DA361B944DE3004D233E /* Observables */, + C8C3DA6F1B944DE3004D233E /* ObservableType.swift */, + C8C3DA701B944DE3004D233E /* Observer.swift */, + C8C3DA711B944DE3004D233E /* ObserverOf.swift */, + C8C3DA721B944DE3004D233E /* Observers */, + C8C3DA7B1B944DE3004D233E /* ObserverType+Extensions.swift */, + C8C3DA7C1B944DE3004D233E /* ObserverType.swift */, + C8C3DA7D1B944DE3004D233E /* Rx.swift */, + C8C3DA7E1B944DE3004D233E /* RxBox.swift */, + C8C3DA7F1B944DE3004D233E /* RxResult.swift */, + C8C3DA801B944DE3004D233E /* Scheduler.swift */, + C8C3DA811B944DE3004D233E /* Schedulers */, + C8C3DA8B1B944DE3004D233E /* Subjects */, + ); + name = RxSwift; + path = ../RxSwift; + sourceTree = ""; + }; + C8C3DA171B944DE3004D233E /* Concurrency */ = { + isa = PBXGroup; + children = ( + C8C3DA181B944DE3004D233E /* AsyncLock.swift */, + C8C3DA191B944DE3004D233E /* Lock.swift */, + ); + path = Concurrency; + sourceTree = ""; + }; + C8C3DA1B1B944DE3004D233E /* DataStructures */ = { + isa = PBXGroup; + children = ( + C8C3DA1C1B944DE3004D233E /* Bag.swift */, + C8C3DA1D1B944DE3004D233E /* InfiniteSequence.swift */, + C8C3DA1E1B944DE3004D233E /* Queue.swift */, + ); + path = DataStructures; + sourceTree = ""; + }; + C8C3DA201B944DE3004D233E /* Disposables */ = { + isa = PBXGroup; + children = ( + C8C3DA211B944DE3004D233E /* AnonymousDisposable.swift */, + C8C3DA221B944DE3004D233E /* BinaryDisposable.swift */, + C8C3DA231B944DE3004D233E /* BooleanDisposable.swift */, + C8C3DA241B944DE3004D233E /* CompositeDisposable.swift */, + C8C3DA251B944DE3004D233E /* DisposeBag.swift */, + C8C3DA261B944DE3004D233E /* DisposeBase.swift */, + C8C3DA271B944DE3004D233E /* NAryDisposable.swift */, + C8C3DA281B944DE3004D233E /* NAryDisposable.tt */, + C8C3DA291B944DE3004D233E /* NopDisposable.swift */, + C8C3DA2A1B944DE3004D233E /* ScheduledDisposable.swift */, + C8C3DA2B1B944DE3004D233E /* ScopedDispose.swift */, + C8C3DA2C1B944DE3004D233E /* SerialDisposable.swift */, + C8C3DA2D1B944DE3004D233E /* SingleAssignmentDisposable.swift */, + C8C3DA2E1B944DE3004D233E /* StableCompositeDisposable.swift */, + C8C3DA2F1B944DE3004D233E /* TernaryDisposable.swift */, + ); + path = Disposables; + sourceTree = ""; + }; + C8C3DA361B944DE3004D233E /* Observables */ = { + isa = PBXGroup; + children = ( + C8C3DA371B944DE3004D233E /* Implementations */, + C8C3DA661B944DE3004D233E /* Observable+Aggregate.swift */, + C8C3DA671B944DE3004D233E /* Observable+Binding.swift */, + C8C3DA681B944DE3004D233E /* Observable+Concurrency.swift */, + C8C3DA691B944DE3004D233E /* Observable+Creation.swift */, + C8C3DA6A1B944DE3004D233E /* Observable+Debug.swift */, + C8C3DA6B1B944DE3004D233E /* Observable+Multiple.swift */, + C8C3DA6C1B944DE3004D233E /* Observable+Single.swift */, + C8C3DA6D1B944DE3004D233E /* Observable+StandardSequenceOperators.swift */, + C8C3DA6E1B944DE3004D233E /* Observable+Time.swift */, + ); + path = Observables; + sourceTree = ""; + }; + C8C3DA371B944DE3004D233E /* Implementations */ = { + isa = PBXGroup; + children = ( + C8C3DA381B944DE3004D233E /* Amb.swift */, + C8C3DA391B944DE3004D233E /* AnonymousObservable.swift */, + C8C3DA3A1B944DE3004D233E /* AsObservable.swift */, + C8C3DA3B1B944DE3004D233E /* Catch.swift */, + C8C3DA3C1B944DE3004D233E /* CombineLatest+arity.swift */, + C8C3DA3D1B944DE3004D233E /* CombineLatest+arity.tt */, + C8C3DA3E1B944DE3004D233E /* CombineLatest+CollectionType.swift */, + C8C3DA3F1B944DE3004D233E /* CombineLatest.swift */, + C8C3DA401B944DE3004D233E /* Concat.swift */, + C8C3DA411B944DE3004D233E /* ConnectableObservable.swift */, + C8C3DA421B944DE3004D233E /* Debug.swift */, + C8C3DA431B944DE3004D233E /* Deferred.swift */, + C8C3DA441B944DE3004D233E /* DelaySubscription.swift */, + C8C3DA451B944DE3004D233E /* DistinctUntilChanged.swift */, + C8C3DA461B944DE3004D233E /* Do.swift */, + C8C3DA471B944DE3004D233E /* Empty.swift */, + C8C3DA481B944DE3004D233E /* FailWith.swift */, + C8C3DA491B944DE3004D233E /* Filter.swift */, + C8C3DA4A1B944DE3004D233E /* FlatMap.swift */, + C8C3DA4B1B944DE3004D233E /* Just.swift */, + C8C3DA4C1B944DE3004D233E /* Map.swift */, + C8C3DA4D1B944DE3004D233E /* Merge.swift */, + C8C3DA4E1B944DE3004D233E /* Multicast.swift */, + C8C3DA4F1B944DE3004D233E /* Never.swift */, + C8C3DA501B944DE3004D233E /* ObserveOn.swift */, + C8C3DA511B944DE3004D233E /* ObserveOnSerialDispatchQueue.swift */, + C8C3DA521B944DE3004D233E /* ObserveSingleOn.swift */, + C8C3DA531B944DE3004D233E /* Producer.swift */, + C8C3DA541B944DE3004D233E /* Reduce.swift */, + C8C3DA551B944DE3004D233E /* RefCount.swift */, + C8C3DA561B944DE3004D233E /* Sample.swift */, + C8C3DA571B944DE3004D233E /* Scan.swift */, + C8C3DA581B944DE3004D233E /* Sink.swift */, + C8C3DA591B944DE3004D233E /* Skip.swift */, + C8C3DA5A1B944DE3004D233E /* StartWith.swift */, + C8C3DA5B1B944DE3004D233E /* SubscribeOn.swift */, + C8C3DA5C1B944DE3004D233E /* Switch.swift */, + C8C3DA5D1B944DE3004D233E /* Take.swift */, + C8C3DA5E1B944DE3004D233E /* TakeUntil.swift */, + C8C3DA5F1B944DE3004D233E /* TakeWhile.swift */, + C8C3DA601B944DE3004D233E /* Throttle.swift */, + C8C3DA611B944DE3004D233E /* Timer.swift */, + C8C3DA621B944DE3004D233E /* Zip+arity.swift */, + C8C3DA631B944DE3004D233E /* Zip+arity.tt */, + C8C3DA641B944DE3004D233E /* Zip+CollectionType.swift */, + C8C3DA651B944DE3004D233E /* Zip.swift */, + ); + path = Implementations; + sourceTree = ""; + }; + C8C3DA721B944DE3004D233E /* Observers */ = { + isa = PBXGroup; + children = ( + C8C3DA731B944DE3004D233E /* AnonymousObserver.swift */, + C8C3DA741B944DE3004D233E /* AutoDetachObserver.swift */, + C8C3DA751B944DE3004D233E /* DoneObserver.swift */, + C8C3DA761B944DE3004D233E /* NopObserver.swift */, + C8C3DA771B944DE3004D233E /* ObserverBase.swift */, + C8C3DA781B944DE3004D233E /* SafeObserver.swift */, + C8C3DA791B944DE3004D233E /* ScheduledObserver.swift */, + C8C3DA7A1B944DE3004D233E /* TailRecursiveSink.swift */, + ); + path = Observers; + sourceTree = ""; + }; + C8C3DA811B944DE3004D233E /* Schedulers */ = { + isa = PBXGroup; + children = ( + C8C3DA821B944DE3004D233E /* ConcurrentDispatchQueueScheduler.swift */, + C8C3DA831B944DE3004D233E /* CurrentThreadScheduler.swift */, + C8C3DA841B944DE3004D233E /* DispatchQueueSchedulerPriority.swift */, + C8C3DA851B944DE3004D233E /* MainScheduler.swift */, + C8C3DA861B944DE3004D233E /* OperationQueueScheduler.swift */, + C8C3DA871B944DE3004D233E /* RecursiveScheduler.swift */, + C8C3DA881B944DE3004D233E /* Scheduler+Extensions.swift */, + C8C3DA891B944DE3004D233E /* SchedulerServices+Emulation.swift */, + C8C3DA8A1B944DE3004D233E /* SerialDispatchQueueScheduler.swift */, + ); + path = Schedulers; + sourceTree = ""; + }; + C8C3DA8B1B944DE3004D233E /* Subjects */ = { + isa = PBXGroup; + children = ( + C8C3DA8C1B944DE3004D233E /* BehaviorSubject.swift */, + C8C3DA8D1B944DE3004D233E /* PublishSubject.swift */, + C8C3DA8E1B944DE3004D233E /* ReplaySubject.swift */, + C8C3DA8F1B944DE3004D233E /* SubjectType.swift */, + C8C3DA901B944DE3004D233E /* Variable.swift */, + ); + path = Subjects; + sourceTree = ""; + }; C8DF92C71B0B2F84009BCF9A /* iOS */ = { isa = PBXGroup; children = ( @@ -1285,16 +1294,16 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + C8C3DAAC1B944DE3004D233E /* Info.plist in Resources */, C8297E5D1B6CF905000589EA /* WikipediaSearchCell.xib in Resources */, + C8C3DAB41B944DE3004D233E /* CombineLatest+arity.tt in Resources */, C8297E5E1B6CF905000589EA /* LaunchScreen.xib in Resources */, - C836EC311B8A7A4500AB941D /* CombineLatest+arity.tt in Resources */, + C8C3DAA11B944DE3004D233E /* NAryDisposable.tt in Resources */, C8297E5F1B6CF905000589EA /* WikipediaImageCell.xib in Resources */, - C836EC541B8A7A4500AB941D /* Zip+arity.tt in Resources */, - C836EC1E1B8A7A4500AB941D /* NAryDisposable.tt in Resources */, C8297E601B6CF905000589EA /* Images.xcassets in Resources */, C8297E611B6CF905000589EA /* Main.storyboard in Resources */, C836ECDE1B8A7AA600AB941D /* Info.plist in Resources */, - C836EC291B8A7A4500AB941D /* Info.plist in Resources */, + C8C3DADA1B944DE3004D233E /* Zip+arity.tt in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1326,212 +1335,215 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + C8C3DAAF1B944DE3004D233E /* Amb.swift in Sources */, + C8C3DAE71B944DE4004D233E /* Observer.swift in Sources */, C8297E2F1B6CF905000589EA /* RxTableViewSectionedAnimatedDataSource.swift in Sources */, - C836EC241B8A7A4500AB941D /* StableCompositeDisposable.swift in Sources */, - C836EC6B1B8A7A4500AB941D /* ObserverType.swift in Sources */, - C836EC6F1B8A7A4500AB941D /* RxResult.swift in Sources */, + C8C3DA991B944DE3004D233E /* Disposable.swift in Sources */, C836ECE01B8A7AA600AB941D /* RxCollectionViewReactiveArrayDataSource.swift in Sources */, + C8C3DA961B944DE3004D233E /* Bag.swift in Sources */, + C8C3DACF1B944DE3004D233E /* Sink.swift in Sources */, C836ECE81B8A7AA600AB941D /* RxCollectionViewDataSourceProxy.swift in Sources */, - C836EC2E1B8A7A4500AB941D /* AsObservable.swift in Sources */, - C8C3DA011B936C11004D233E /* Zip+CollectionType.swift in Sources */, C8297E301B6CF905000589EA /* RandomUserAPI.swift in Sources */, - C836EC591B8A7A4500AB941D /* Observable+Creation.swift in Sources */, C8297E311B6CF905000589EA /* SearchResultViewModel.swift in Sources */, - C836EC411B8A7A4500AB941D /* ObserveOn.swift in Sources */, C8297E321B6CF905000589EA /* HtmlParsing.swift in Sources */, C836ECE91B8A7AA600AB941D /* RxCollectionViewDelegateProxy.swift in Sources */, - C836EC791B8A7A4500AB941D /* BehaviorSubject.swift in Sources */, C8297E331B6CF905000589EA /* NumberCell.swift in Sources */, + C8C3DAF91B944DE4004D233E /* DispatchQueueSchedulerPriority.swift in Sources */, + C8C3DAA61B944DE3004D233E /* SingleAssignmentDisposable.swift in Sources */, + C8C3DAD71B944DE3004D233E /* Throttle.swift in Sources */, C836ECE21B8A7AA600AB941D /* ItemEvents.swift in Sources */, + C8C3DAA41B944DE3004D233E /* ScopedDispose.swift in Sources */, + C8C3DA9C1B944DE3004D233E /* BooleanDisposable.swift in Sources */, + C8C3DAC31B944DE3004D233E /* Map.swift in Sources */, + C8C3DB011B944DE4004D233E /* PublishSubject.swift in Sources */, 07A5C3DC1B70B703001EFE5C /* CalculatorViewController.swift in Sources */, C8297E341B6CF905000589EA /* UIImageView+Extensions.swift in Sources */, - C836EC381B8A7A4500AB941D /* DelaySubscription.swift in Sources */, - C836EC351B8A7A4500AB941D /* ConnectableObservable.swift in Sources */, - C836EC781B8A7A4500AB941D /* SerialDispatchQueueScheduler.swift in Sources */, - C836EC741B8A7A4500AB941D /* OperationQueueScheduler.swift in Sources */, - C836EC271B8A7A4500AB941D /* Event.swift in Sources */, + C8C3DABF1B944DE3004D233E /* FailWith.swift in Sources */, + C8C3DABC1B944DE3004D233E /* DistinctUntilChanged.swift in Sources */, + C8C3DAAB1B944DE3004D233E /* ImmediateScheduler.swift in Sources */, + C8C3DABA1B944DE3004D233E /* Deferred.swift in Sources */, + C8C3DAC11B944DE3004D233E /* FlatMap.swift in Sources */, + C8C3DAE51B944DE4004D233E /* Observable+Time.swift in Sources */, C836ECEF1B8A7AA600AB941D /* UIActionSheet+Rx.swift in Sources */, - C836EC671B8A7A4500AB941D /* SafeObserver.swift in Sources */, - C836EC101B8A7A4500AB941D /* AsyncLock.swift in Sources */, - C836EC711B8A7A4500AB941D /* ConcurrentDispatchQueueScheduler.swift in Sources */, C836ECD21B8A7AA600AB941D /* ControlTarget.swift in Sources */, - C836EC4B1B8A7A4500AB941D /* StartWith.swift in Sources */, C836ECD61B8A7AA600AB941D /* KVOObserver.swift in Sources */, C836ECCB1B8A7AA600AB941D /* _RXDelegateProxy.m in Sources */, C836ECDF1B8A7AA600AB941D /* CoreDataEntityEvent.swift in Sources */, C8297E351B6CF905000589EA /* NumberSectionView.swift in Sources */, - C836EC601B8A7A4500AB941D /* Observer.swift in Sources */, - C836EC131B8A7A4500AB941D /* Bag.swift in Sources */, C836ECF51B8A7AA600AB941D /* UIDatePicker+Rx.swift in Sources */, - C836EC3C1B8A7A4500AB941D /* FlatMap.swift in Sources */, C836ECD11B8A7AA600AB941D /* Logging.swift in Sources */, - C836EC401B8A7A4500AB941D /* ObservableBase.swift in Sources */, - C836EC4C1B8A7A4500AB941D /* SubscribeOn.swift in Sources */, - C836EC2D1B8A7A4500AB941D /* AnonymousObservable.swift in Sources */, - C836EC141B8A7A4500AB941D /* InfiniteSequence.swift in Sources */, - C836EC6C1B8A7A4500AB941D /* PeriodicScheduler.swift in Sources */, - C836EC3D1B8A7A4500AB941D /* Map.swift in Sources */, - C836EC4F1B8A7A4500AB941D /* TakeUntil.swift in Sources */, + C8C3DAEB1B944DE4004D233E /* DoneObserver.swift in Sources */, + C8C3DAD11B944DE3004D233E /* StartWith.swift in Sources */, + C8C3DADC1B944DE3004D233E /* Zip.swift in Sources */, + C8C3DAFD1B944DE4004D233E /* Scheduler+Extensions.swift in Sources */, C8297E361B6CF905000589EA /* RootViewController.swift in Sources */, + C8C3DB001B944DE4004D233E /* BehaviorSubject.swift in Sources */, C8297E371B6CF905000589EA /* RxCollectionViewSectionedDataSource.swift in Sources */, - C836EC371B8A7A4500AB941D /* Deferred.swift in Sources */, - C836EC5A1B8A7A4500AB941D /* Observable+Debug.swift in Sources */, - C836EC1A1B8A7A4500AB941D /* CompositeDisposable.swift in Sources */, C8297E381B6CF905000589EA /* Changeset.swift in Sources */, - C836EC651B8A7A4500AB941D /* NopObserver.swift in Sources */, - C836EC461B8A7A4500AB941D /* RefCount.swift in Sources */, C8297E391B6CF905000589EA /* CollectionViewImageCell.swift in Sources */, - C836EC2A1B8A7A4500AB941D /* Observable+Extensions.swift in Sources */, - C836EC771B8A7A4500AB941D /* SchedulerServices+Emulation.swift in Sources */, C836ECD41B8A7AA600AB941D /* DeinitAction.swift in Sources */, - C836EC5C1B8A7A4500AB941D /* Observable+Single.swift in Sources */, - C836EC7C1B8A7A4500AB941D /* SubjectType.swift in Sources */, - C836EC191B8A7A4500AB941D /* BooleanDisposable.swift in Sources */, - C836EC751B8A7A4500AB941D /* RecursiveScheduler.swift in Sources */, - C836EC1B1B8A7A4500AB941D /* DisposeBag.swift in Sources */, + C8C3DAE41B944DE4004D233E /* Observable+StandardSequenceOperators.swift in Sources */, + C8C3DB041B944DE4004D233E /* Variable.swift in Sources */, + C8C3DAB91B944DE3004D233E /* Debug.swift in Sources */, + C8C3DAF21B944DE4004D233E /* ObserverType.swift in Sources */, + C8C3DAA81B944DE3004D233E /* TernaryDisposable.swift in Sources */, C8297E3A1B6CF905000589EA /* WikipediaSearchViewController.swift in Sources */, + C8C3DAB01B944DE3004D233E /* AnonymousObservable.swift in Sources */, + C8C3DAC91B944DE3004D233E /* ObserveSingleOn.swift in Sources */, C836ECED1B8A7AA600AB941D /* RxTableViewDelegateProxy.swift in Sources */, - C836EC451B8A7A4500AB941D /* Reduce.swift in Sources */, + C8C3DA9B1B944DE3004D233E /* BinaryDisposable.swift in Sources */, C836ECD51B8A7AA600AB941D /* KVOObservable.swift in Sources */, + C8C3DAA01B944DE3004D233E /* NAryDisposable.swift in Sources */, + C8C3DAB11B944DE3004D233E /* AsObservable.swift in Sources */, + C8C3DAE91B944DE4004D233E /* AnonymousObserver.swift in Sources */, C836ECF81B8A7AA600AB941D /* UILabel+Rx.swift in Sources */, - C836EC5B1B8A7A4500AB941D /* Observable+Multiple.swift in Sources */, C836ECEC1B8A7AA600AB941D /* RxTableViewDataSourceProxy.swift in Sources */, + C8C3DAE21B944DE4004D233E /* Observable+Multiple.swift in Sources */, + C8C3DAD41B944DE3004D233E /* Take.swift in Sources */, + C8C3DAC01B944DE3004D233E /* Filter.swift in Sources */, C836ECE51B8A7AA600AB941D /* RxTableViewDataSourceType.swift in Sources */, + C8C3DB021B944DE4004D233E /* ReplaySubject.swift in Sources */, + C8C3DA941B944DE3004D233E /* Lock.swift in Sources */, C836ECDC1B8A7AA600AB941D /* RxCocoa.swift in Sources */, C836ECFC1B8A7AA600AB941D /* UISlider+Rx.swift in Sources */, + C8C3DACC1B944DE3004D233E /* RefCount.swift in Sources */, + C8C3DAB81B944DE3004D233E /* ConnectableObservable.swift in Sources */, C8297E3B1B6CF905000589EA /* String+extensions.swift in Sources */, C8297E3C1B6CF905000589EA /* SectionModel.swift in Sources */, - C836EC3E1B8A7A4500AB941D /* Merge.swift in Sources */, C8297E3D1B6CF905000589EA /* SearchViewModel.swift in Sources */, - C836EC251B8A7A4500AB941D /* TernaryDisposable.swift in Sources */, - C836EC481B8A7A4500AB941D /* Scan.swift in Sources */, - C836EC661B8A7A4500AB941D /* ObserverBase.swift in Sources */, - C836EC621B8A7A4500AB941D /* AnonymousObserver.swift in Sources */, C836ECCD1B8A7AA600AB941D /* _RXSwizzling.m in Sources */, C836ECEB1B8A7AA600AB941D /* RxSearchBarDelegateProxy.swift in Sources */, - C836EC631B8A7A4500AB941D /* AutoDetachObserver.swift in Sources */, C8297E3E1B6CF905000589EA /* DetailViewController.swift in Sources */, - C836EC611B8A7A4500AB941D /* ObserverOf.swift in Sources */, C836ECD71B8A7AA600AB941D /* NSNotificationCenter+Rx.swift in Sources */, C836ED001B8A7AA600AB941D /* UITextView+Rx.swift in Sources */, + C8C3DAF01B944DE4004D233E /* TailRecursiveSink.swift in Sources */, + C8C3DADE1B944DE3004D233E /* Observable+Binding.swift in Sources */, C8297E3F1B6CF905000589EA /* SectionModelType.swift in Sources */, - C836EC6E1B8A7A4500AB941D /* RxBox.swift in Sources */, - C836EC361B8A7A4500AB941D /* Debug.swift in Sources */, - C836EC731B8A7A4500AB941D /* MainScheduler.swift in Sources */, + C8C3DAF61B944DE4004D233E /* Scheduler.swift in Sources */, C8297E401B6CF905000589EA /* ImageService.swift in Sources */, + C8C3DADD1B944DE3004D233E /* Observable+Aggregate.swift in Sources */, C836ECF41B8A7AA600AB941D /* UIControl+Rx.swift in Sources */, + C8C3DAB31B944DE3004D233E /* CombineLatest+arity.swift in Sources */, + C8C3DAAA1B944DE3004D233E /* Event.swift in Sources */, C836ECFA1B8A7AA600AB941D /* UISearchBar+Rx.swift in Sources */, - C836EC321B8A7A4500AB941D /* CombineLatest.swift in Sources */, C8297E411B6CF905000589EA /* RxCollectionViewSectionedReloadDataSource.swift in Sources */, + C8C3DAE01B944DE3004D233E /* Observable+Creation.swift in Sources */, + C8C3DAF41B944DE4004D233E /* RxBox.swift in Sources */, C836ECD31B8A7AA600AB941D /* Deallocating.swift in Sources */, - C836EC3B1B8A7A4500AB941D /* Filter.swift in Sources */, + C8C3DB031B944DE4004D233E /* SubjectType.swift in Sources */, + C8C3DAB51B944DE3004D233E /* CombineLatest+CollectionType.swift in Sources */, + C8C3DA951B944DE3004D233E /* ConnectableObservableType.swift in Sources */, + C8C3DAD21B944DE3004D233E /* SubscribeOn.swift in Sources */, C8297E421B6CF905000589EA /* WikipediaSearchResult.swift in Sources */, + C8C3DAE31B944DE4004D233E /* Observable+Single.swift in Sources */, + C8C3DAB61B944DE3004D233E /* CombineLatest.swift in Sources */, C8297E431B6CF905000589EA /* GitHubAPI.swift in Sources */, - C836EC2F1B8A7A4500AB941D /* Catch.swift in Sources */, + C8C3DAD91B944DE3004D233E /* Zip+arity.swift in Sources */, + C8C3DAA31B944DE3004D233E /* ScheduledDisposable.swift in Sources */, + C8C3DACB1B944DE3004D233E /* Reduce.swift in Sources */, C8297E441B6CF905000589EA /* PseudoRandomGenerator.swift in Sources */, + C8C3DAC21B944DE3004D233E /* Just.swift in Sources */, C836ECD91B8A7AA600AB941D /* NSObject+Rx.swift in Sources */, C836ECEE1B8A7AA600AB941D /* RxTextViewDelegateProxy.swift in Sources */, - C836EC551B8A7A4500AB941D /* Zip.swift in Sources */, - C836EC701B8A7A4500AB941D /* Scheduler.swift in Sources */, C836ECE11B8A7AA600AB941D /* RxTableViewReactiveArrayDataSource.swift in Sources */, C836ECFE1B8A7AA600AB941D /* UITableView+Rx.swift in Sources */, - C836EC391B8A7A4500AB941D /* DistinctUntilChanged.swift in Sources */, + C8C3DAC81B944DE3004D233E /* ObserveOnSerialDispatchQueue.swift in Sources */, C836ECCC1B8A7AA600AB941D /* _RXKVOObserver.m in Sources */, C8297E451B6CF905000589EA /* SectionedViewType.swift in Sources */, + C8C3DAD31B944DE3004D233E /* Switch.swift in Sources */, C8297E461B6CF905000589EA /* Example.swift in Sources */, - C836EC301B8A7A4500AB941D /* CombineLatest+arity.swift in Sources */, + C8C3DA9E1B944DE3004D233E /* DisposeBag.swift in Sources */, + C8C3DA9A1B944DE3004D233E /* AnonymousDisposable.swift in Sources */, + C8C3DAC51B944DE3004D233E /* Multicast.swift in Sources */, C836ECF91B8A7AA600AB941D /* UIScrollView+Rx.swift in Sources */, - C836EC281B8A7A4500AB941D /* ImmediateScheduler.swift in Sources */, - C836EC2C1B8A7A4500AB941D /* Amb.swift in Sources */, - C836EC181B8A7A4500AB941D /* BinaryDisposable.swift in Sources */, C836ECDB1B8A7AA600AB941D /* RxCLLocationManagerDelegateProxy.swift in Sources */, C8297E471B6CF905000589EA /* ViewController.swift in Sources */, C8297E481B6CF905000589EA /* Differentiator.swift in Sources */, + C8C3DAEA1B944DE4004D233E /* AutoDetachObserver.swift in Sources */, C8297E491B6CF905000589EA /* WikipediaSearchCell.swift in Sources */, + C8C3DA971B944DE3004D233E /* InfiniteSequence.swift in Sources */, C836ECE31B8A7AA600AB941D /* NSManagedObjectContext+Rx.swift in Sources */, - C836EC151B8A7A4500AB941D /* Queue.swift in Sources */, C8297E4A1B6CF905000589EA /* GitHubSignupViewController.swift in Sources */, - C836EC491B8A7A4500AB941D /* Sink.swift in Sources */, - C836EC5E1B8A7A4500AB941D /* Observable+Time.swift in Sources */, - C836EC161B8A7A4500AB941D /* Disposable.swift in Sources */, C836ECFD1B8A7AA600AB941D /* UISwitch+Rx.swift in Sources */, - C836EC0E1B8A7A4500AB941D /* AnyObject+Rx.swift in Sources */, - C836EC681B8A7A4500AB941D /* ScheduledObserver.swift in Sources */, + C8C3DAFF1B944DE4004D233E /* SerialDispatchQueueScheduler.swift in Sources */, + C8C3DAC71B944DE3004D233E /* ObserveOn.swift in Sources */, C8297E4B1B6CF905000589EA /* Random.xcdatamodeld in Sources */, C836ECF21B8A7AA600AB941D /* UIButton+Rx.swift in Sources */, - C836EC4E1B8A7A4500AB941D /* Take.swift in Sources */, - C836EC5F1B8A7A4500AB941D /* ObservableType.swift in Sources */, + C8C3DACA1B944DE3004D233E /* Producer.swift in Sources */, + C8C3DAFE1B944DE4004D233E /* SchedulerServices+Emulation.swift in Sources */, + C8C3DAA91B944DE3004D233E /* Error.swift in Sources */, + C8C3DAF71B944DE4004D233E /* ConcurrentDispatchQueueScheduler.swift in Sources */, C8297E4C1B6CF905000589EA /* APIWrappersViewController.swift in Sources */, C8297E4D1B6CF905000589EA /* RxTableViewSectionedReloadDataSource.swift in Sources */, - C836EC521B8A7A4500AB941D /* Timer.swift in Sources */, C8297E4E1B6CF905000589EA /* RxCollectionViewSectionedAnimatedDataSource.swift in Sources */, - C836EC1D1B8A7A4500AB941D /* NAryDisposable.swift in Sources */, + C8C3DAAE1B944DE3004D233E /* Observable.swift in Sources */, + C8C3DABB1B944DE3004D233E /* DelaySubscription.swift in Sources */, + C8C3DA9F1B944DE3004D233E /* DisposeBase.swift in Sources */, + C8C3DAB21B944DE3004D233E /* Catch.swift in Sources */, + C8C3DADB1B944DE3004D233E /* Zip+CollectionType.swift in Sources */, + C8C3DAF81B944DE4004D233E /* CurrentThreadScheduler.swift in Sources */, + C8C3DAC61B944DE3004D233E /* Never.swift in Sources */, + C8C3DA911B944DE3004D233E /* AnyObject+Rx.swift in Sources */, + C8C3DAEE1B944DE4004D233E /* SafeObserver.swift in Sources */, C836ECF01B8A7AA600AB941D /* UIAlertView+Rx.swift in Sources */, - C836EC4D1B8A7A4500AB941D /* Switch.swift in Sources */, + C8C3DAFA1B944DE4004D233E /* MainScheduler.swift in Sources */, C836ECCA1B8A7AA600AB941D /* _RX.m in Sources */, - C836EC111B8A7A4500AB941D /* Lock.swift in Sources */, - C836EC171B8A7A4500AB941D /* AnonymousDisposable.swift in Sources */, C8297E4F1B6CF905000589EA /* Wireframe.swift in Sources */, - C836EC641B8A7A4500AB941D /* DoneObserver.swift in Sources */, C836ECD01B8A7AA600AB941D /* DelegateProxyType.swift in Sources */, - C836EC1C1B8A7A4500AB941D /* DisposeBase.swift in Sources */, C8297E501B6CF905000589EA /* TableViewController.swift in Sources */, - C836EC571B8A7A4500AB941D /* Observable+Binding.swift in Sources */, - C836EC421B8A7A4500AB941D /* ObserveOnSerialDispatchQueue.swift in Sources */, - C836EC7D1B8A7A4500AB941D /* Variable.swift in Sources */, - C836EC471B8A7A4500AB941D /* Sample.swift in Sources */, + C8C3DAD81B944DE3004D233E /* Timer.swift in Sources */, + C8C3DAD61B944DE3004D233E /* TakeWhile.swift in Sources */, C836ECD81B8A7AA600AB941D /* NSObject+Rx+CoreGraphics.swift in Sources */, C836ECEA1B8A7AA600AB941D /* RxScrollViewDelegateProxy.swift in Sources */, - C836EC1F1B8A7A4500AB941D /* NopDisposable.swift in Sources */, - C836EC531B8A7A4500AB941D /* Zip+arity.swift in Sources */, + C8C3DAE81B944DE4004D233E /* ObserverOf.swift in Sources */, C836ECCF1B8A7AA600AB941D /* DelegateProxy.swift in Sources */, C8297E511B6CF905000589EA /* PartialUpdatesViewController.swift in Sources */, - C836EC211B8A7A4500AB941D /* ScopedDispose.swift in Sources */, + C8C3DAA51B944DE3004D233E /* SerialDisposable.swift in Sources */, + C8C3DAEC1B944DE4004D233E /* NopObserver.swift in Sources */, + C8C3DAFB1B944DE4004D233E /* OperationQueueScheduler.swift in Sources */, + C8C3DAE61B944DE4004D233E /* ObservableType.swift in Sources */, + C8C3DA921B944DE3004D233E /* Cancelable.swift in Sources */, C8297E521B6CF905000589EA /* Dependencies.swift in Sources */, + C8C3DA981B944DE3004D233E /* Queue.swift in Sources */, C836ECF61B8A7AA600AB941D /* UIGestureRecognizer+Rx.swift in Sources */, - C836EC7A1B8A7A4500AB941D /* PublishSubject.swift in Sources */, - C836EC7B1B8A7A4500AB941D /* ReplaySubject.swift in Sources */, - C836EC3F1B8A7A4500AB941D /* Multicast.swift in Sources */, C8297E531B6CF905000589EA /* WikipediaAPI.swift in Sources */, C8297E541B6CF905000589EA /* AppDelegate.swift in Sources */, + C8C3DAE11B944DE4004D233E /* Observable+Debug.swift in Sources */, + C8C3DABE1B944DE3004D233E /* Empty.swift in Sources */, + C8C3DAD01B944DE3004D233E /* Skip.swift in Sources */, C8297E551B6CF905000589EA /* RxTableViewSectionedDataSource.swift in Sources */, C836ECE61B8A7AA600AB941D /* RxActionSheetDelegateProxy.swift in Sources */, - C836EC511B8A7A4500AB941D /* Throttle.swift in Sources */, - C836EC2B1B8A7A4500AB941D /* Observable.swift in Sources */, - C836EC441B8A7A4500AB941D /* Producer.swift in Sources */, - C836EC231B8A7A4500AB941D /* SingleAssignmentDisposable.swift in Sources */, - C836EC221B8A7A4500AB941D /* SerialDisposable.swift in Sources */, - C836EC721B8A7A4500AB941D /* DispatchQueueSchedulerPriority.swift in Sources */, + C8C3DA9D1B944DE3004D233E /* CompositeDisposable.swift in Sources */, C836ECFF1B8A7AA600AB941D /* UITextField+Rx.swift in Sources */, + C8C3DACD1B944DE3004D233E /* Sample.swift in Sources */, C8297E561B6CF905000589EA /* WikipediaPage.swift in Sources */, C8297E571B6CF905000589EA /* Randomizer.swift in Sources */, - C836EC761B8A7A4500AB941D /* Scheduler+Extensions.swift in Sources */, + C8C3DAF11B944DE4004D233E /* ObserverType+Extensions.swift in Sources */, C836ECE71B8A7AA600AB941D /* RxAlertViewDelegateProxy.swift in Sources */, - C836EC5D1B8A7A4500AB941D /* Observable+StandardSequenceOperators.swift in Sources */, - C836EC501B8A7A4500AB941D /* TakeWhile.swift in Sources */, C836ECCE1B8A7AA600AB941D /* CLLocationManager+Rx.swift in Sources */, C836ECE41B8A7AA600AB941D /* RxCollectionViewDataSourceType.swift in Sources */, + C8C3DAC41B944DE3004D233E /* Merge.swift in Sources */, + C8C3DAF31B944DE4004D233E /* Rx.swift in Sources */, C836ECF31B8A7AA600AB941D /* UICollectionView+Rx.swift in Sources */, - C836EC3A1B8A7A4500AB941D /* Do.swift in Sources */, + C8C3DAAD1B944DE3004D233E /* Observable+Extensions.swift in Sources */, C836ECFB1B8A7AA600AB941D /* UISegmentedControl+Rx.swift in Sources */, - C836EC431B8A7A4500AB941D /* ObserveSingleOn.swift in Sources */, - C8C3D9FC1B935D1E004D233E /* CombineLatest+CollectionType.swift in Sources */, - C836EC0F1B8A7A4500AB941D /* Cancelable.swift in Sources */, - C836EC331B8A7A4500AB941D /* Concat.swift in Sources */, + C8C3DAFC1B944DE4004D233E /* RecursiveScheduler.swift in Sources */, C836ECDA1B8A7AA600AB941D /* NSURLSession+Rx.swift in Sources */, + C8C3DACE1B944DE3004D233E /* Scan.swift in Sources */, + C8C3DAEF1B944DE4004D233E /* ScheduledObserver.swift in Sources */, C8297E581B6CF905000589EA /* User.swift in Sources */, - C836EC691B8A7A4500AB941D /* TailRecursiveSink.swift in Sources */, - C836EC201B8A7A4500AB941D /* ScheduledDisposable.swift in Sources */, - C836EC6D1B8A7A4500AB941D /* Rx.swift in Sources */, + C8C3DADF1B944DE3004D233E /* Observable+Concurrency.swift in Sources */, + C8C3DAA21B944DE3004D233E /* NopDisposable.swift in Sources */, + C8C3DAB71B944DE3004D233E /* Concat.swift in Sources */, + C8C3DAED1B944DE4004D233E /* ObserverBase.swift in Sources */, + C8C3DAD51B944DE3004D233E /* TakeUntil.swift in Sources */, + C8C3DABD1B944DE3004D233E /* Do.swift in Sources */, C836ECDD1B8A7AA600AB941D /* RxTarget.swift in Sources */, - C836EC561B8A7A4500AB941D /* Observable+Aggregate.swift in Sources */, + C8C3DA931B944DE3004D233E /* AsyncLock.swift in Sources */, + C8C3DAF51B944DE4004D233E /* RxResult.swift in Sources */, C836ECF11B8A7AA600AB941D /* UIBarButtonItem+Rx.swift in Sources */, - C836EC4A1B8A7A4500AB941D /* Skip.swift in Sources */, - C836EC121B8A7A4500AB941D /* ConnectableObservableType.swift in Sources */, + C8C3DAA71B944DE3004D233E /* StableCompositeDisposable.swift in Sources */, C836ECF71B8A7AA600AB941D /* UIImageView+Rx.swift in Sources */, - C836EC6A1B8A7A4500AB941D /* ObserverType+Extensions.swift in Sources */, - C836EC581B8A7A4500AB941D /* Observable+Concurrency.swift in Sources */, - C836EC261B8A7A4500AB941D /* Error.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/RxSwift/Disposables/NopDisposable.swift b/RxSwift/Disposables/NopDisposable.swift index c0bccdd4..cccd71ff 100644 --- a/RxSwift/Disposables/NopDisposable.swift +++ b/RxSwift/Disposables/NopDisposable.swift @@ -8,26 +8,11 @@ import Foundation -public let NopDisposableResult = success(NopDisposable.instance) - // Disposable that does nothing // Nop = No Operation public class NopDisposable : Disposable { - struct Internal { - static let instance = NopDisposable() - } - - public class var instance: Disposable { - get { - return Internal.instance - } - } - - /* - public class func Instance() -> Disposable { - return Internal.instance - }*/ + public static let instance: Disposable = NopDisposable() init() { diff --git a/RxSwift/Disposables/ScheduledDisposable.swift b/RxSwift/Disposables/ScheduledDisposable.swift index 93980505..28fc210b 100644 --- a/RxSwift/Disposables/ScheduledDisposable.swift +++ b/RxSwift/Disposables/ScheduledDisposable.swift @@ -37,7 +37,7 @@ public class ScheduledDisposable : Cancelable { public func dispose() { scheduler.schedule(()) { self.disposeInner() - return NopDisposableResult + return NopDisposable.instance } } diff --git a/RxSwift/ImmediateScheduler.swift b/RxSwift/ImmediateScheduler.swift index 21c70107..f19f47ef 100644 --- a/RxSwift/ImmediateScheduler.swift +++ b/RxSwift/ImmediateScheduler.swift @@ -10,14 +10,15 @@ import Foundation public protocol ImmediateScheduler { - func schedule(state: StateType, action: (/*ImmediateScheduler,*/ StateType) -> RxResult) -> RxResult + func schedule(state: StateType, action: (StateType) -> Disposable) -> Disposable } -public func scheduleRecursively(scheduler: ImmediateScheduler, state: State, - action: (state: State, recurse: (State) -> Void) -> Void) -> Disposable { - let recursiveScheduler = RecursiveImmediateSchedulerOf(action: action, scheduler: scheduler) - - recursiveScheduler.schedule(state) - - return recursiveScheduler -} \ No newline at end of file +extension ImmediateScheduler { + public func scheduleRecursively(state: State, action: (state: State, recurse: (State) -> Void) -> Void) -> Disposable { + let recursiveScheduler = RecursiveImmediateSchedulerOf(action: action, scheduler: self) + + recursiveScheduler.schedule(state) + + return recursiveScheduler + } +} diff --git a/RxSwift/Observable+Extensions.swift b/RxSwift/Observable+Extensions.swift index 880b8a5a..5d32792d 100644 --- a/RxSwift/Observable+Extensions.swift +++ b/RxSwift/Observable+Extensions.swift @@ -75,30 +75,8 @@ extension ObservableType { } public extension ObservableType { - /* - Observables can really be anything, implemented by anyone and hooked into large `Observable` chains. - - Some of them maybe have flawed implementations that don't respect Rx message grammar. - - To guard from rogue `Observable`s and `Observer`s Rx internal classes have safeguards in place. - Those safeguards will ensure that those rogue `Observables` or `Observers` don't cause - havoc in the system. - - Unfortunately, that comes with significant performance penalty. To improve overall performance - internal Rx classes can drop their safety mechanisms when talking with other known implementations. - - `Producers` are special kind of observables that need to make sure that message grammar is respected. - - */ + // All internal subscribe calls go through this method public func subscribeSafe(observer: O) -> Disposable { - if let source = self as? Producer { - return source.subscribeRaw(observer, enableSafeguard: false) - } - - if let source = self as? ObservableBase { - return source.subscribe(observer) - } - return self.subscribe(observer) } } \ No newline at end of file diff --git a/RxSwift/Observables/Implementations/AnonymousObservable.swift b/RxSwift/Observables/Implementations/AnonymousObservable.swift index f3e53d07..20cd69e2 100644 --- a/RxSwift/Observables/Implementations/AnonymousObservable.swift +++ b/RxSwift/Observables/Implementations/AnonymousObservable.swift @@ -7,17 +7,53 @@ // import Foundation +import Darwin -public class AnonymousObservable : ObservableBase { +class AnonymousObservableSink : Sink, ObserverType { + typealias E = O.E + typealias Parent = AnonymousObservable + + // state + var isStopped: Int32 = 0 + + override init(observer: O, cancel: Disposable) { + super.init(observer: observer, cancel: cancel) + } + + func on(event: Event) { + switch event { + case .Next: + if isStopped == 1 { + return + } + self.observer?.on(event) + case .Error: + fallthrough + case .Completed: + if OSAtomicCompareAndSwap32(0, 1, &isStopped) { + self.observer?.on(event) + self.dispose() + } + } + } + + func run(parent: Parent) -> Disposable { + return parent.subscribeHandler(ObserverOf(self)) + } +} + +public class AnonymousObservable : Producer { public typealias SubscribeHandler = (ObserverOf) -> Disposable - + public let subscribeHandler: SubscribeHandler public init(_ subscribeHandler: SubscribeHandler) { self.subscribeHandler = subscribeHandler } - public override func subscribeCore(observer: ObserverOf) -> Disposable { - return subscribeHandler(observer) + public override func run(observer: O, cancel: Disposable, setSink: (Disposable) -> Void) -> Disposable { + let sink = AnonymousObservableSink(observer: observer, cancel: cancel) + setSink(sink) + return sink.run(self) } } \ No newline at end of file diff --git a/RxSwift/Observables/Implementations/DelaySubscription.swift b/RxSwift/Observables/Implementations/DelaySubscription.swift index 30b02426..584b1485 100644 --- a/RxSwift/Observables/Implementations/DelaySubscription.swift +++ b/RxSwift/Observables/Implementations/DelaySubscription.swift @@ -44,9 +44,8 @@ class DelaySubscription: Producer { override func run(observer: O, cancel: Disposable, setSink: (Disposable) -> Void) -> Disposable { let sink = DelaySubscriptionSink(parent: self, observer: observer, cancel: cancel) setSink(sink) - let scheduledDisposable = scheduler.scheduleRelative((), dueTime: dueTime) { _ in - return success(self.source.subscribeSafe(sink)) + return scheduler.scheduleRelative((), dueTime: dueTime) { _ in + return self.source.subscribeSafe(sink) } - return getScheduledDisposable(scheduledDisposable) } } \ No newline at end of file diff --git a/RxSwift/Observables/Implementations/Empty.swift b/RxSwift/Observables/Implementations/Empty.swift new file mode 100644 index 00000000..c9025ead --- /dev/null +++ b/RxSwift/Observables/Implementations/Empty.swift @@ -0,0 +1,20 @@ +// +// Empty.swift +// Rx +// +// Created by Krunoslav Zaher on 8/30/15. +// Copyright © 2015 Krunoslav Zaher. All rights reserved. +// + +import Foundation + +class Empty : Producer { + override init() { + + } + + override func run(observer: O, cancel: Disposable, setSink: (Disposable) -> Void) -> Disposable { + observer.on(.Completed) + return NopDisposable.instance + } +} \ No newline at end of file diff --git a/RxSwift/Observables/Implementations/FailWith.swift b/RxSwift/Observables/Implementations/FailWith.swift new file mode 100644 index 00000000..3a36621a --- /dev/null +++ b/RxSwift/Observables/Implementations/FailWith.swift @@ -0,0 +1,22 @@ +// +// FailWith.swift +// Rx +// +// Created by Krunoslav Zaher on 8/30/15. +// Copyright © 2015 Krunoslav Zaher. All rights reserved. +// + +import Foundation + +class FailWith : Producer { + let error: ErrorType + + init(error: ErrorType) { + self.error = error + } + + override func run(observer: O, cancel: Disposable, setSink: (Disposable) -> Void) -> Disposable { + observer.on(.Error(error)) + return NopDisposable.instance + } +} \ No newline at end of file diff --git a/RxSwift/Observables/Implementations/Just.swift b/RxSwift/Observables/Implementations/Just.swift new file mode 100644 index 00000000..bb7453ec --- /dev/null +++ b/RxSwift/Observables/Implementations/Just.swift @@ -0,0 +1,23 @@ +// +// Just.swift +// Rx +// +// Created by Krunoslav Zaher on 8/30/15. +// Copyright © 2015 Krunoslav Zaher. All rights reserved. +// + +import Foundation + +class Just : Producer { + let element: Element + + init(element: Element) { + self.element = element + } + + override func run(observer: O, cancel: Disposable, setSink: (Disposable) -> Void) -> Disposable { + observer.on(.Next(element)) + observer.on(.Completed) + return NopDisposable.instance + } +} \ No newline at end of file diff --git a/RxSwift/Observables/Implementations/Never.swift b/RxSwift/Observables/Implementations/Never.swift new file mode 100644 index 00000000..3ea38ca0 --- /dev/null +++ b/RxSwift/Observables/Implementations/Never.swift @@ -0,0 +1,15 @@ +// +// Never.swift +// Rx +// +// Created by Krunoslav Zaher on 8/30/15. +// Copyright © 2015 Krunoslav Zaher. All rights reserved. +// + +import Foundation + +class Never : Producer { + override func run(observer: O, cancel: Disposable, setSink: (Disposable) -> Void) -> Disposable { + return NopDisposable.instance + } +} \ No newline at end of file diff --git a/RxSwift/Observables/Implementations/ObservableBase.swift b/RxSwift/Observables/Implementations/ObservableBase.swift deleted file mode 100644 index 5e487f76..00000000 --- a/RxSwift/Observables/Implementations/ObservableBase.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// ObservableBase.swift -// Rx -// -// Created by Krunoslav Zaher on 2/15/15. -// Copyright (c) 2015 Krunoslav Zaher. All rights reserved. -// - -import Foundation - -public class ObservableBase : Observable { - - override public func subscribe(observer: O) -> Disposable { - let autoDetachObserver = AutoDetachObserver(observer: observer) - - let disposable = subscribeCore(ObserverOf(autoDetachObserver)) - autoDetachObserver.setDisposable(disposable) - - return autoDetachObserver - } - - func subscribeCore(observer: ObserverOf) -> Disposable { - return abstractMethod() - } -} \ No newline at end of file diff --git a/RxSwift/Observables/Implementations/ObserveOn.swift b/RxSwift/Observables/Implementations/ObserveOn.swift index a69e01f3..d686bcc3 100644 --- a/RxSwift/Observables/Implementations/ObserveOn.swift +++ b/RxSwift/Observables/Implementations/ObserveOn.swift @@ -74,7 +74,7 @@ class ObserveOnSink : ObserverBase { } if shouldStart { - scheduleDisposable.disposable = scheduleRecursively(self.scheduler, state: (), action: self.run) + scheduleDisposable.disposable = self.scheduler.scheduleRecursively((), action: self.run) } } diff --git a/RxSwift/Observables/Implementations/ObserveOnSerialDispatchQueue.swift b/RxSwift/Observables/Implementations/ObserveOnSerialDispatchQueue.swift index e1156b48..b4d77dea 100644 --- a/RxSwift/Observables/Implementations/ObserveOnSerialDispatchQueue.swift +++ b/RxSwift/Observables/Implementations/ObserveOnSerialDispatchQueue.swift @@ -25,14 +25,14 @@ class ObserveOnSerialDispatchQueueSink : ObserverBase { } override func onCore(event: Event) { - self.scheduler.schedule(()) { (_) -> RxResult in + self.scheduler.schedule(()) { (_) -> Disposable in send(self.observer, event) if event.isStopEvent { self.dispose() } - return NopDisposableResult + return NopDisposable.instance } } diff --git a/RxSwift/Observables/Implementations/ObserveSingleOn.swift b/RxSwift/Observables/Implementations/ObserveSingleOn.swift index 104e73f2..14efa971 100644 --- a/RxSwift/Observables/Implementations/ObserveSingleOn.swift +++ b/RxSwift/Observables/Implementations/ObserveSingleOn.swift @@ -61,7 +61,7 @@ class ObserveSingleOnObserver : Sink, ObserverType { self.dispose() - return NopDisposableResult + return NopDisposable.instance } } } diff --git a/RxSwift/Observables/Implementations/Producer.swift b/RxSwift/Observables/Implementations/Producer.swift index 5d7135ea..a6fbac87 100644 --- a/RxSwift/Observables/Implementations/Producer.swift +++ b/RxSwift/Observables/Implementations/Producer.swift @@ -8,26 +8,18 @@ import Foundation -// Base class for implementation of query operators, providing performance benefits over the use of `create` -// They are also responsible for ensuring correct message grammar and disposal grammar. -// -// That assumption enables big performance gain, but rogue `Producers` can bring system into -// an invalid state. -// -// For that reason, extreme care is needed when subclassing `Producer`. It's code correctness must be proven -// and it needs to be thorougly tested. -public class Producer : Observable { +public class _Producer : Producer { public override init() { super.init() } +} + +public class Producer : Observable { + override init() { + super.init() + } public override func subscribe(observer: O) -> Disposable { - return self.subscribeRaw(observer, enableSafeguard: true) - } - - public func subscribeRaw(observer: O, enableSafeguard: Bool) -> Disposable { - let _: Observer - let sink = SingleAssignmentDisposable() let subscription = SingleAssignmentDisposable() diff --git a/RxSwift/Observables/Implementations/Skip.swift b/RxSwift/Observables/Implementations/Skip.swift index 5d94295d..d6903bd6 100644 --- a/RxSwift/Observables/Implementations/Skip.swift +++ b/RxSwift/Observables/Implementations/Skip.swift @@ -101,12 +101,12 @@ class SkipTimeSink Disposable { let disposeTimer = parent.scheduler.scheduleRelative((), dueTime: self.parent.duration) { self.tick() - return NopDisposableResult + return NopDisposable.instance } let disposeSubscription = parent.source.subscribeSafe(self) - return BinaryDisposable(disposeTimer.get(), disposeSubscription) + return BinaryDisposable(disposeTimer, disposeSubscription) } } diff --git a/RxSwift/Observables/Implementations/SubscribeOn.swift b/RxSwift/Observables/Implementations/SubscribeOn.swift index eef5957b..0b9821f5 100644 --- a/RxSwift/Observables/Implementations/SubscribeOn.swift +++ b/RxSwift/Observables/Implementations/SubscribeOn.swift @@ -33,14 +33,12 @@ class SubscribeOnSink : Sink, ObserverType { disposeEverything.disposable = cancelSchedule - let scheduleResult = parent.scheduler.schedule(()) { (_) -> RxResult in + cancelSchedule.disposable = parent.scheduler.schedule(()) { (_) -> Disposable in let subscription = self.parent.source.subscribeSafe(self) disposeEverything.disposable = ScheduledDisposable(scheduler: self.parent.scheduler, disposable: subscription) - return NopDisposableResult + return NopDisposable.instance } - cancelSchedule.disposable = getScheduledDisposable(scheduleResult) - return disposeEverything } } diff --git a/RxSwift/Observables/Implementations/Take.swift b/RxSwift/Observables/Implementations/Take.swift index cbd8fbe6..053081b5 100644 --- a/RxSwift/Observables/Implementations/Take.swift +++ b/RxSwift/Observables/Implementations/Take.swift @@ -104,12 +104,12 @@ class TakeTimeSink Disposable { let disposeTimer = parent.scheduler.scheduleRelative((), dueTime: self.parent.duration) { self.tick() - return NopDisposableResult + return NopDisposable.instance } let disposeSubscription = parent.source.subscribeSafe(self) - return BinaryDisposable(disposeTimer.get(), disposeSubscription) + return BinaryDisposable(disposeTimer, disposeSubscription) } } diff --git a/RxSwift/Observables/Implementations/Throttle.swift b/RxSwift/Observables/Implementations/Throttle.swift index 322fb508..f5d158e1 100644 --- a/RxSwift/Observables/Implementations/Throttle.swift +++ b/RxSwift/Observables/Implementations/Throttle.swift @@ -17,7 +17,7 @@ class ThrottleSink : Sink, Observe var lock = NSRecursiveLock() // state var id = 0 as UInt64 - let value = RxMutableBox(nil) + var value: Element? = nil let cancellable = SerialDisposable() @@ -46,19 +46,19 @@ class ThrottleSink : Sink, Observe let latestId = self.lock.calculateLocked { () -> UInt64 in let observer = self.observer - let oldValue = self.value.value + let oldValue = self.value self.id = self.id &+ 1 switch event { case .Next(let element): - self.value.value = element + self.value = element case .Error: - self.value.value = nil + self.value = nil observer?.on(event) self.dispose() case .Completed: - self.value.value = nil + self.value = nil if let value = oldValue { observer?.on(.Next(value)) } @@ -78,27 +78,20 @@ class ThrottleSink : Sink, Observe let scheduler = self.parent.scheduler let dueTime = self.parent.dueTime - let _ = scheduler.scheduleRelative(latestId, dueTime: dueTime) { (id) in + let disposeTimer = scheduler.scheduleRelative(latestId, dueTime: dueTime) { (id) in self.propagate() - return NopDisposableResult - }.map { disposeTimer -> Disposable in - d.disposable = disposeTimer - return disposeTimer - }.recoverWith { e -> RxResult in - self.lock.performLocked { - observer?.on(.Error(e)) - self.dispose() - } - return NopDisposableResult + return NopDisposable.instance } + + d.disposable = disposeTimer default: break } } func propagate() { let originalValue: Element? = self.lock.calculateLocked { - let originalValue = self.value.value - self.value.value = nil + let originalValue = self.value + self.value = nil return originalValue } diff --git a/RxSwift/Observables/Implementations/Timer.swift b/RxSwift/Observables/Implementations/Timer.swift index 8b0fa9d6..ffc8c120 100644 --- a/RxSwift/Observables/Implementations/Timer.swift +++ b/RxSwift/Observables/Implementations/Timer.swift @@ -19,12 +19,10 @@ class TimerSink : Sink { } func run() -> Disposable { - let result = self.parent.schedulePeriodic(state: 0, startAfter: self.parent.dueTime, period: self.parent.period!) { state in + return self.parent.scheduler.schedulePeriodic(0 as Int64, startAfter: self.parent.dueTime, period: self.parent.period!) { state in self.observer?.on(.Next(state)) return state &+ 1 } - - return result } } @@ -39,39 +37,26 @@ class TimerOneOffSink : Sink Disposable { - let result = self.parent.scheduler.scheduleRelative((), dueTime: self.parent.dueTime) { (_) -> RxResult in + return self.parent.scheduler.scheduleRelative((), dueTime: self.parent.dueTime) { (_) -> Disposable in self.observer?.on(.Next(0)) self.observer?.on(.Completed) - return NopDisposableResult + return NopDisposable.instance } - - ensureScheduledSuccessfully(result.map { _ in () }) - - return result.get() } } class Timer: Producer { typealias TimeInterval = S.TimeInterval - typealias SchedulePeriodic = ( - state: Int64, - startAfter: S.TimeInterval, - period: S.TimeInterval, - action: (state: Int64) -> Int64 - ) -> Disposable let scheduler: S let dueTime: TimeInterval let period: TimeInterval? - let schedulePeriodic: SchedulePeriodic - - init(dueTime: TimeInterval, period: TimeInterval?, scheduler: S, schedulePeriodic: SchedulePeriodic) { + init(dueTime: TimeInterval, period: TimeInterval?, scheduler: S) { self.scheduler = scheduler self.dueTime = dueTime self.period = period - self.schedulePeriodic = schedulePeriodic } override func run(observer: O, cancel: Disposable, setSink: (Disposable) -> Void) -> Disposable { diff --git a/RxSwift/Observables/Observable+Creation.swift b/RxSwift/Observables/Observable+Creation.swift index 99ea8175..68d1d92b 100644 --- a/RxSwift/Observables/Observable+Creation.swift +++ b/RxSwift/Observables/Observable+Creation.swift @@ -17,28 +17,19 @@ public func create(subscribe: (ObserverOf) -> Disposable) -> Observable // empty public func empty() -> Observable { - return AnonymousObservable { observer in - sendCompleted(observer) - return NopDisposable.instance - } + return Empty() } // never public func never() -> Observable { - return AnonymousObservable { observer in - return NopDisposable.instance - } + return Never() } // return public func just(element: E) -> Observable { - return AnonymousObservable { observer in - sendNext(observer, element) - sendCompleted(observer) - return NopDisposable.instance - } + return Just(element: element) } public func sequenceOf(elements: E ...) -> Observable { @@ -66,10 +57,7 @@ public func from(sequence: // fail public func failWith(error: ErrorType) -> Observable { - return AnonymousObservable { observer in - sendError(observer, error) - return NopDisposable.instance - } + return FailWith(error: error) } // defer diff --git a/RxSwift/Observables/Observable+Time.swift b/RxSwift/Observables/Observable+Time.swift index 26e7ca0c..221250b4 100644 --- a/RxSwift/Observables/Observable+Time.swift +++ b/RxSwift/Observables/Observable+Time.swift @@ -40,45 +40,22 @@ extension ObservableType { // interval - - - // fallback { - public func interval(period: S.TimeInterval, _ scheduler: S) -> Observable { return Timer(dueTime: period, period: period, - scheduler: scheduler, - schedulePeriodic: abstractSchedulePeriodic(scheduler) + scheduler: scheduler ) } - // } - - // periodic schedulers { - -public func interval(period: S.TimeInterval, _ scheduler: S) - -> Observable { - return Timer(dueTime: period, - period: period, - scheduler: scheduler, - schedulePeriodic: abstractSchedulePeriodic(scheduler) - ) -} - - // } - // timer - // fallback { - public func timer(dueTime: S.TimeInterval, _ period: S.TimeInterval, scheduler: S) -> Observable { return Timer( dueTime: dueTime, period: period, - scheduler: scheduler, - schedulePeriodic: abstractSchedulePeriodic(scheduler) + scheduler: scheduler ) } @@ -87,37 +64,10 @@ public func timer(dueTime: S.TimeInterval, scheduler: S) return Timer( dueTime: dueTime, period: nil, - scheduler: scheduler, - schedulePeriodic: abstractSchedulePeriodic(scheduler) + scheduler: scheduler ) } - // } - - // periodic schedulers { - -public func timer(dueTime: S.TimeInterval, _ period: S.TimeInterval, scheduler: S) - -> Observable { - return Timer( - dueTime: dueTime, - period: period, - scheduler: scheduler, - schedulePeriodic: abstractSchedulePeriodic(scheduler) - ) -} - -public func timer(dueTime: S.TimeInterval, scheduler: S) - -> Observable { - return Timer( - dueTime: dueTime, - period: nil, - scheduler: scheduler, - schedulePeriodic: abstractSchedulePeriodic(scheduler) - ) -} - - // } - // take extension ObservableType { diff --git a/RxSwift/PeriodicScheduler.swift b/RxSwift/PeriodicScheduler.swift deleted file mode 100644 index 339969f2..00000000 --- a/RxSwift/PeriodicScheduler.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// PeriodicScheduler.swift -// RxSwift -// -// Created by Krunoslav Zaher on 6/6/15. -// Copyright (c) 2015 Krunoslav Zaher. All rights reserved. -// - -import Foundation - -public protocol PeriodicScheduler : Scheduler { - func schedulePeriodic(state: StateType, startAfter: TimeInterval, period: TimeInterval, action: (StateType) -> StateType) -> RxResult -} \ No newline at end of file diff --git a/RxSwift/Scheduler.swift b/RxSwift/Scheduler.swift index 5c6aab4f..3624ee66 100644 --- a/RxSwift/Scheduler.swift +++ b/RxSwift/Scheduler.swift @@ -16,45 +16,8 @@ public protocol Scheduler: ImmediateScheduler { get } - func scheduleRelative(state: StateType, dueTime: TimeInterval, action: (StateType) -> RxResult) -> RxResult + func scheduleRelative(state: StateType, dueTime: TimeInterval, action: (StateType) -> Disposable) -> Disposable + + func schedulePeriodic(state: StateType, startAfter: TimeInterval, period: TimeInterval, action: (StateType) -> StateType) -> Disposable } - -// This is being called every time `Rx` scheduler performs action to -// check the result of the computation. -// -// The default implementation will throw an Exception if the result failed. -// -// It's probably best to make sure all of the errors have been handled before -// the computation finishes, but it's not unreasonable to change the implementation -// for release builds to silently fail (although I would not recommend it). -// -// Changing default behavior is not recommended because possible data corruption -// is "usually" a lot worse than letting the program crash. -// -func ensureScheduledSuccessfully(result: RxResult) -> RxResult { - switch result { - case .Failure(let error): - return errorDuringScheduledAction(error); - default: break - } - - return SuccessResult -} - -func getScheduledDisposable(disposable: RxResult) -> Disposable { - switch disposable { - case .Failure(let error): - errorDuringScheduledAction(error); - return NopDisposable.instance - default: - return disposable.get() - } -} - -func errorDuringScheduledAction(error: ErrorType) -> RxResult { - let exception = NSException(name: "ScheduledActionError", reason: "Error happened during scheduled action execution", userInfo: ["error": error as! AnyObject]) - exception.raise() - - return SuccessResult -} diff --git a/RxSwift/Schedulers/ConcurrentDispatchQueueScheduler.swift b/RxSwift/Schedulers/ConcurrentDispatchQueueScheduler.swift index 46661052..814034d8 100644 --- a/RxSwift/Schedulers/ConcurrentDispatchQueueScheduler.swift +++ b/RxSwift/Schedulers/ConcurrentDispatchQueueScheduler.swift @@ -8,7 +8,7 @@ import Foundation -public class ConcurrentDispatchQueueScheduler: Scheduler, PeriodicScheduler { +public class ConcurrentDispatchQueueScheduler: Scheduler { public typealias TimeInterval = NSTimeInterval public typealias Time = NSDate @@ -53,11 +53,11 @@ public class ConcurrentDispatchQueueScheduler: Scheduler, PeriodicScheduler { return dispatch_time(DISPATCH_TIME_NOW, convertTimeIntervalToDispatchInterval(timeInterval)) } - public final func schedule(state: StateType, action: (/*ImmediateScheduler,*/ StateType) -> RxResult) -> RxResult { + public final func schedule(state: StateType, action: StateType -> Disposable) -> Disposable { return self.scheduleInternal(state, action: action) } - func scheduleInternal(state: StateType, action: (/*ImmediateScheduler,*/ StateType) -> RxResult) -> RxResult { + func scheduleInternal(state: StateType, action: StateType -> Disposable) -> Disposable { let cancel = SingleAssignmentDisposable() dispatch_async(self.queue) { @@ -65,15 +65,13 @@ public class ConcurrentDispatchQueueScheduler: Scheduler, PeriodicScheduler { return } - _ = ensureScheduledSuccessfully(action(/*self,*/ state).map { disposable in - cancel.disposable = disposable - }) + cancel.disposable = action(state) } - return success(cancel) + return cancel } - public final func scheduleRelative(state: StateType, dueTime: NSTimeInterval, action: (/*Scheduler,*/ StateType) -> RxResult) -> RxResult { + public final func scheduleRelative(state: StateType, dueTime: NSTimeInterval, action: (StateType) -> Disposable) -> Disposable { let timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, self.queue) let dispatchInterval = MainScheduler.convertTimeIntervalToDispatchTime(dueTime) @@ -85,9 +83,7 @@ public class ConcurrentDispatchQueueScheduler: Scheduler, PeriodicScheduler { if compositeDisposable.disposed { return } - ensureScheduledSuccessfully(action(/*self,*/ state).map { disposable in - compositeDisposable.addDisposable(disposable) - }) + compositeDisposable.addDisposable(action(state)) }) dispatch_resume(timer) @@ -95,7 +91,7 @@ public class ConcurrentDispatchQueueScheduler: Scheduler, PeriodicScheduler { dispatch_source_cancel(timer) }) - return success(compositeDisposable) + return compositeDisposable } public func schedulePeriodic(state: StateType, startAfter: TimeInterval, period: TimeInterval, action: (StateType) -> StateType) -> RxResult { diff --git a/RxSwift/Schedulers/CurrentThreadScheduler.swift b/RxSwift/Schedulers/CurrentThreadScheduler.swift new file mode 100644 index 00000000..f7dbb68a --- /dev/null +++ b/RxSwift/Schedulers/CurrentThreadScheduler.swift @@ -0,0 +1,39 @@ +// +// CurrentThreadScheduler.swift +// Rx +// +// Created by Krunoslav Zaher on 8/30/15. +// Copyright © 2015 Krunoslav Zaher. All rights reserved. +// + +import Foundation + +let CurrentThreadSchedulerKeyInstance = CurrentThreadSchedulerKey() + +class CurrentThreadSchedulerKey : NSObject, NSCopying { + override func isEqual(object: AnyObject?) -> Bool { + return object === CurrentThreadSchedulerKeyInstance + } + + override var hashValue: Int { return -904739208 } + + override func copy() -> AnyObject { + return CurrentThreadSchedulerKeyInstance + } + + func copyWithZone(zone: NSZone) -> AnyObject { + return CurrentThreadSchedulerKeyInstance + } +} + +// WIP +class CurrentThreadScheduler : ImmediateScheduler { + + static var isScheduleRequired: Bool { + return NSThread.currentThread().threadDictionary[CurrentThreadSchedulerKeyInstance] == nil + } + + func schedule(state: StateType, action: (StateType) -> Disposable) -> Disposable { + return NopDisposable.instance + } +} \ No newline at end of file diff --git a/RxSwift/Schedulers/MainScheduler.swift b/RxSwift/Schedulers/MainScheduler.swift index 5e0114a6..b583b07e 100644 --- a/RxSwift/Schedulers/MainScheduler.swift +++ b/RxSwift/Schedulers/MainScheduler.swift @@ -22,7 +22,7 @@ public final class MainScheduler : SerialDispatchQueueScheduler { } } - override func scheduleInternal(state: StateType, action: (/*ImmediateScheduler,*/ StateType) -> RxResult) -> RxResult { + override func scheduleInternal(state: StateType, action: StateType -> Disposable) -> Disposable { if NSThread.currentThread().isMainThread { return action(state) } diff --git a/RxSwift/Schedulers/OperationQueueScheduler.swift b/RxSwift/Schedulers/OperationQueueScheduler.swift index 3c24915b..e1d8c62b 100644 --- a/RxSwift/Schedulers/OperationQueueScheduler.swift +++ b/RxSwift/Schedulers/OperationQueueScheduler.swift @@ -15,7 +15,7 @@ public class OperationQueueScheduler: ImmediateScheduler { self.operationQueue = operationQueue } - public func schedule(state: StateType, action: (/*ImmediateScheduler,*/ StateType) -> RxResult) -> RxResult { + public func schedule(state: StateType, action: (StateType) -> Disposable) -> Disposable { let compositeDisposable = CompositeDisposable() @@ -26,10 +26,8 @@ public class OperationQueueScheduler: ImmediateScheduler { return } - ensureScheduledSuccessfully(action(/*self,*/ state).map { disposable in - compositeDisposableWeak?.addDisposable(disposable) - return () - }) + let disposable = action(state) + compositeDisposableWeak?.addDisposable(disposable) } self.operationQueue.addOperation(operation) @@ -38,7 +36,7 @@ public class OperationQueueScheduler: ImmediateScheduler { operation.cancel() }) - return success(compositeDisposable) + return compositeDisposable } } \ No newline at end of file diff --git a/RxSwift/Schedulers/RecursiveScheduler.swift b/RxSwift/Schedulers/RecursiveScheduler.swift index 73370448..87c54c8b 100644 --- a/RxSwift/Schedulers/RecursiveScheduler.swift +++ b/RxSwift/Schedulers/RecursiveScheduler.swift @@ -16,11 +16,11 @@ class RecursiveScheduler: RecursiveSchedulerOf RxResult) -> RxResult { + override func scheduleRelativeAdapter(state: State, dueTime: S.TimeInterval, action: State -> Disposable) -> Disposable { return scheduler.scheduleRelative(state, dueTime: dueTime, action: action) } - override func scheduleAdapter(state: State, action: (State) -> RxResult) -> RxResult { + override func scheduleAdapter(state: State, action: State -> Disposable) -> Disposable { return scheduler.schedule(state, action: action) } } @@ -42,11 +42,11 @@ public class RecursiveSchedulerOf : Disposable { // abstract methods - func scheduleRelativeAdapter(state: State, dueTime: TimeInterval, action: (State) -> RxResult) -> RxResult { + func scheduleRelativeAdapter(state: State, dueTime: TimeInterval, action: State -> Disposable) -> Disposable { return abstractMethod() } - func scheduleAdapter(state: State, action: (State) -> RxResult) -> RxResult { + func scheduleAdapter(state: State, action: State -> Disposable) -> Disposable { return abstractMethod() } @@ -58,10 +58,10 @@ public class RecursiveSchedulerOf : Disposable { var isDone = false var removeKey: CompositeDisposable.DisposeKey? = nil - let d = scheduleRelativeAdapter(state, dueTime: dueTime) { (state) -> RxResult in + let d = scheduleRelativeAdapter(state, dueTime: dueTime) { (state) -> Disposable in // best effort if self.group.disposed { - return NopDisposableResult + return NopDisposable.instance } let action = self.lock.calculateLocked { () -> Action? in @@ -79,18 +79,15 @@ public class RecursiveSchedulerOf : Disposable { action(state: state, scheduler: self) } - return NopDisposableResult + return NopDisposable.instance } - ensureScheduledSuccessfully(d.map { disposable in - lock.performLocked { - if !isDone { - removeKey = group.addDisposable(d.get()) - isAdded = true - } + lock.performLocked { + if !isDone { + removeKey = group.addDisposable(d) + isAdded = true } - return () - }) + } } // immediate scheduling @@ -101,10 +98,10 @@ public class RecursiveSchedulerOf : Disposable { var isDone = false var removeKey: CompositeDisposable.DisposeKey? = nil - let d = scheduleAdapter(state) { (state) -> RxResult in + let d = scheduleAdapter(state) { (state) -> Disposable in // best effort if self.group.disposed { - return NopDisposableResult + return NopDisposable.instance } let action = self.lock.calculateLocked { () -> Action? in @@ -122,18 +119,15 @@ public class RecursiveSchedulerOf : Disposable { action(state: state, scheduler: self) } - return NopDisposableResult + return NopDisposable.instance } - ensureScheduledSuccessfully(d.map { disposable in - lock.performLocked { - if !isDone { - removeKey = group.addDisposable(d.get()) - isAdded = true - } + lock.performLocked { + if !isDone { + removeKey = group.addDisposable(d) + isAdded = true } - return () - }) + } } public func dispose() { @@ -166,10 +160,10 @@ class RecursiveImmediateSchedulerOf : Disposable { var isDone = false var removeKey: CompositeDisposable.DisposeKey? = nil - let d = self.scheduler.schedule(state) { (state) -> RxResult in + let d = self.scheduler.schedule(state) { (state) -> Disposable in // best effort if self.group.disposed { - return NopDisposableResult + return NopDisposable.instance } let action = self.lock.calculateLocked { () -> Action? in @@ -187,18 +181,15 @@ class RecursiveImmediateSchedulerOf : Disposable { action(state: state, recurse: self.schedule) } - return NopDisposableResult + return NopDisposable.instance } - ensureScheduledSuccessfully(d.map { disposable in - lock.performLocked { - if !isDone { - removeKey = group.addDisposable(d.get()) - isAdded = true - } + lock.performLocked { + if !isDone { + removeKey = group.addDisposable(d) + isAdded = true } - return () - }) + } } func dispose() { diff --git a/RxSwift/Schedulers/Scheduler+Extensions.swift b/RxSwift/Schedulers/Scheduler+Extensions.swift index 49c927b3..f409acd9 100644 --- a/RxSwift/Schedulers/Scheduler+Extensions.swift +++ b/RxSwift/Schedulers/Scheduler+Extensions.swift @@ -8,54 +8,19 @@ import Foundation -// periodic scheduling - -// Compiler will choose correct implementation depending on scheduler capabilities. -// -// If scheduler has periodic scheduling capabilities, it will choose them. -// Fallback is periodic recursive scheduler SchedulePeriodicRecursive. - -func abstractSchedulePeriodic( - scheduler: S - ) - -> ( - state: State, - startAfter: S.TimeInterval, - period: S.TimeInterval, - action: (state: State) -> State - ) -> Disposable { - return { state, startAfter, period, action in - let result = scheduler.schedulePeriodic(state, startAfter: startAfter, period: period, action: action) - ensureScheduledSuccessfully(result.map { _ in () }) - - return result.get() - } -} - -func abstractSchedulePeriodic( - scheduler: S - ) - -> ( - state: State, - startAfter: S.TimeInterval, - period: S.TimeInterval, - action: (state: State) -> State - ) -> Disposable { - return { state, startAfter, period, action in - let schedule = SchedulePeriodicRecursive(scheduler: scheduler, startAfter: startAfter, period: period, action: action, state: state) +extension Scheduler { + public func schedulePeriodic(state: StateType, startAfter: TimeInterval, period: TimeInterval, action: (StateType) -> StateType) -> Disposable { + let schedule = SchedulePeriodicRecursive(scheduler: self, startAfter: startAfter, period: period, action: action, state: state) return schedule.start() } + + func scheduleRecursive(state: State, dueTime: TimeInterval, action: (state: State, scheduler: RecursiveSchedulerOf) -> Void) -> Disposable { + + let scheduler = RecursiveScheduler(scheduler: self, action: action) + + scheduler.schedule(state, dueTime: dueTime) + + return scheduler + } } - -// recursive scheduling - -func scheduleRecursive(scheduler: S, _ state: State, _ dueTime: S.TimeInterval, - _ action: (state: State, scheduler: RecursiveSchedulerOf) -> Void) -> Disposable { - - let scheduler = RecursiveScheduler(scheduler: scheduler, action: action) - - scheduler.schedule(state, dueTime: dueTime) - - return scheduler -} \ No newline at end of file diff --git a/RxSwift/Schedulers/SchedulerServices+Emulation.swift b/RxSwift/Schedulers/SchedulerServices+Emulation.swift index 9dd329e7..edc5ed0c 100644 --- a/RxSwift/Schedulers/SchedulerServices+Emulation.swift +++ b/RxSwift/Schedulers/SchedulerServices+Emulation.swift @@ -36,7 +36,7 @@ class SchedulePeriodicRecursive { } func start() -> Disposable { - return scheduleRecursive(scheduler, SchedulePeriodicRecursiveCommand.Tick, self.startAfter, self.tick) + return scheduler.scheduleRecursive(SchedulePeriodicRecursiveCommand.Tick, dueTime: self.startAfter, action: self.tick) } func tick(command: SchedulePeriodicRecursiveCommand, scheduler: RecursiveScheduler) -> Void { diff --git a/RxSwift/Schedulers/SerialDispatchQueueScheduler.swift b/RxSwift/Schedulers/SerialDispatchQueueScheduler.swift index 7f949e61..09a75bec 100644 --- a/RxSwift/Schedulers/SerialDispatchQueueScheduler.swift +++ b/RxSwift/Schedulers/SerialDispatchQueueScheduler.swift @@ -23,7 +23,7 @@ import Foundation // internal serial queue can be customized using `serialQueueConfiguration` // callback. // -public class SerialDispatchQueueScheduler: Scheduler, PeriodicScheduler { +public class SerialDispatchQueueScheduler: Scheduler { public typealias TimeInterval = NSTimeInterval public typealias Time = NSDate @@ -90,11 +90,11 @@ public class SerialDispatchQueueScheduler: Scheduler, PeriodicScheduler { return dispatch_time(DISPATCH_TIME_NOW, convertTimeIntervalToDispatchInterval(timeInterval)) } - public final func schedule(state: StateType, action: (/*ImmediateScheduler,*/ StateType) -> RxResult) -> RxResult { + public final func schedule(state: StateType, action: (StateType) -> Disposable) -> Disposable { return self.scheduleInternal(state, action: action) } - func scheduleInternal(state: StateType, action: (/*ImmediateScheduler,*/ StateType) -> RxResult) -> RxResult { + func scheduleInternal(state: StateType, action: (StateType) -> Disposable) -> Disposable { let cancel = SingleAssignmentDisposable() dispatch_async(self.serialQueue) { @@ -102,15 +102,14 @@ public class SerialDispatchQueueScheduler: Scheduler, PeriodicScheduler { return } - _ = ensureScheduledSuccessfully(action(/*self,*/ state).map { disposable in - cancel.disposable = disposable - }) + + cancel.disposable = action(state) } - return success(cancel) + return cancel } - public final func scheduleRelative(state: StateType, dueTime: NSTimeInterval, action: (/*Scheduler,*/ StateType) -> RxResult) -> RxResult { + public final func scheduleRelative(state: StateType, dueTime: NSTimeInterval, action: (StateType) -> Disposable) -> Disposable { let timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, self.serialQueue) let dispatchInterval = MainScheduler.convertTimeIntervalToDispatchTime(dueTime) @@ -122,9 +121,7 @@ public class SerialDispatchQueueScheduler: Scheduler, PeriodicScheduler { if compositeDisposable.disposed { return } - ensureScheduledSuccessfully(action(/*self,*/ state).map { disposable in - compositeDisposable.addDisposable(disposable) - }) + compositeDisposable.addDisposable(action(state)) }) dispatch_resume(timer) @@ -132,10 +129,10 @@ public class SerialDispatchQueueScheduler: Scheduler, PeriodicScheduler { dispatch_source_cancel(timer) }) - return success(compositeDisposable) + return compositeDisposable } - public func schedulePeriodic(state: StateType, startAfter: TimeInterval, period: TimeInterval, action: (StateType) -> StateType) -> RxResult { + public func schedulePeriodic(state: StateType, startAfter: TimeInterval, period: TimeInterval, action: (StateType) -> StateType) -> Disposable { let timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, self.serialQueue) let initial = MainScheduler.convertTimeIntervalToDispatchTime(startAfter) @@ -157,6 +154,6 @@ public class SerialDispatchQueueScheduler: Scheduler, PeriodicScheduler { }) dispatch_resume(timer) - return success(cancel) + return cancel } } \ No newline at end of file diff --git a/RxTests/RxSwiftTests/TestImplementations/Mocks/ColdObservable.swift b/RxTests/RxSwiftTests/TestImplementations/Mocks/ColdObservable.swift index fd4af810..506c31f4 100644 --- a/RxTests/RxSwiftTests/TestImplementations/Mocks/ColdObservable.swift +++ b/RxTests/RxSwiftTests/TestImplementations/Mocks/ColdObservable.swift @@ -37,7 +37,7 @@ class ColdObservable: Observable { for recordedEvent in recordedEvents { testScheduler.scheduleRelative((), dueTime: recordedEvent.time, action: { (Int) in self.observers.forEach { $0.on(recordedEvent.event) } - return NopDisposableResult + return NopDisposable.instance }) } diff --git a/RxTests/RxSwiftTests/TestImplementations/Mocks/HotObservable.swift b/RxTests/RxSwiftTests/TestImplementations/Mocks/HotObservable.swift index 68066e42..1c0d82d2 100644 --- a/RxTests/RxSwiftTests/TestImplementations/Mocks/HotObservable.swift +++ b/RxTests/RxSwiftTests/TestImplementations/Mocks/HotObservable.swift @@ -32,7 +32,7 @@ class HotObservable : Observable { for recordedEvent in recordedEvents { testScheduler.schedule((), time: recordedEvent.time) { t in self.observers.forEach { $0.on(recordedEvent.event) } - return NopDisposableResult + return NopDisposable.instance } } } diff --git a/RxTests/RxSwiftTests/TestImplementations/Schedulers/TestScheduler.swift b/RxTests/RxSwiftTests/TestImplementations/Schedulers/TestScheduler.swift index 97a82293..88169653 100644 --- a/RxTests/RxSwiftTests/TestImplementations/Schedulers/TestScheduler.swift +++ b/RxTests/RxSwiftTests/TestImplementations/Schedulers/TestScheduler.swift @@ -21,14 +21,6 @@ func createObserver(scheduler: TestScheduler) -> MockObserver { return MockObserver(scheduler: scheduler) } -class PeriodicTestScheduler : TestScheduler, PeriodicScheduler { - - override init(initialClock: Time) { - super.init(initialClock: initialClock) - } - -} - class TestScheduler : VirtualTimeSchedulerBase { override init(initialClock: Time) { @@ -50,7 +42,7 @@ class TestScheduler : VirtualTimeSchedulerBase { func scheduleAt(time: Time, action: () -> Void) { self.schedule((), time: time) { _ in action() - return NopDisposableResult + return NopDisposable.instance } } @@ -63,17 +55,17 @@ class TestScheduler : VirtualTimeSchedulerBase { self.schedule(state, time: created) { (state) in source = create() - return NopDisposableResult + return NopDisposable.instance } self.schedule(state, time: subscribed) { (state) in subscription = source!.subscribe(observer) - return NopDisposableResult + return NopDisposable.instance } self.schedule(state, time: disposed) { (state) in subscription!.dispose() - return NopDisposableResult + return NopDisposable.instance } start() diff --git a/RxTests/RxSwiftTests/TestImplementations/Schedulers/VirtualTimeSchedulerBase.swift b/RxTests/RxSwiftTests/TestImplementations/Schedulers/VirtualTimeSchedulerBase.swift index 078d2cfa..de228dbe 100644 --- a/RxTests/RxSwiftTests/TestImplementations/Schedulers/VirtualTimeSchedulerBase.swift +++ b/RxTests/RxSwiftTests/TestImplementations/Schedulers/VirtualTimeSchedulerBase.swift @@ -18,7 +18,7 @@ protocol ScheduledItemProtocol : Cancelable { } class ScheduledItem : ScheduledItemProtocol { - typealias Action = (/*Scheduler,*/ T) -> RxResult + typealias Action = T -> Disposable let action: Action let state: T @@ -39,7 +39,7 @@ class ScheduledItem : ScheduledItemProtocol { } func invoke() { - self.disposable.disposable = (action(/*scheduler,*/ state).get()) + self.disposable.disposable = action(state) } func dispose() { @@ -74,17 +74,17 @@ class VirtualTimeSchedulerBase : Scheduler, CustomStringConvertible { self.enabled = false } - func schedule(state: StateType, action: (/*ImmediateScheduler,*/ StateType) -> RxResult) -> RxResult { - return self.scheduleRelative(state, dueTime: 0) { /*s,*/ a in - return action(/*s,*/ a) + func schedule(state: StateType, action: StateType -> Disposable) -> Disposable { + return self.scheduleRelative(state, dueTime: 0) { a in + return action(a) } } - func scheduleRelative(state: StateType, dueTime: Int, action: (/*Scheduler,*/ StateType) -> RxResult) -> RxResult { + func scheduleRelative(state: StateType, dueTime: Int, action: StateType -> Disposable) -> Disposable { return schedule(state, time: now + dueTime, action: action) } - func schedule(state: StateType, time: Int, action: (/*Scheduler,*/ StateType) -> RxResult) -> RxResult { + func schedule(state: StateType, time: Int, action: StateType -> Disposable) -> Disposable { let compositeDisposable = CompositeDisposable() let scheduleTime: Int @@ -101,10 +101,10 @@ class VirtualTimeSchedulerBase : Scheduler, CustomStringConvertible { compositeDisposable.addDisposable(item) - return success(compositeDisposable) + return compositeDisposable } - func schedulePeriodic(state: StateType, startAfter: TimeInterval, period: TimeInterval, action: (StateType) -> StateType) -> RxResult { + func schedulePeriodic(state: StateType, startAfter: TimeInterval, period: TimeInterval, action: (StateType) -> StateType) -> Disposable { let compositeDisposable = CompositeDisposable() let scheduleTime: Int @@ -117,7 +117,7 @@ class VirtualTimeSchedulerBase : Scheduler, CustomStringConvertible { let item = ScheduledItem(action: { [unowned self] state in if compositeDisposable.disposed { - return NopDisposableResult + return NopDisposable.instance } let nextState = action(state) return self.schedulePeriodic(nextState, startAfter: period, period: period, action: action) @@ -127,7 +127,7 @@ class VirtualTimeSchedulerBase : Scheduler, CustomStringConvertible { compositeDisposable.addDisposable(item) - return success(compositeDisposable) + return compositeDisposable } func start() { diff --git a/RxTests/RxSwiftTests/Tests/AnonymousObservable+Test.swift b/RxTests/RxSwiftTests/Tests/AnonymousObservable+Test.swift index 9c41a1e2..392ce22c 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/Observable+BlockingTest.swift b/RxTests/RxSwiftTests/Tests/Observable+BlockingTest.swift index 3bf1afe7..11358e16 100644 --- a/RxTests/RxSwiftTests/Tests/Observable+BlockingTest.swift +++ b/RxTests/RxSwiftTests/Tests/Observable+BlockingTest.swift @@ -22,29 +22,35 @@ class ObservableBlockingTest : RxTest { extension ObservableBlockingTest { func testToArray_empty() { - XCTAssert(((empty() as Observable).toArray()).get() == []) + XCTAssert(try! (empty() as Observable).toArray() == []) } func testToArray_return() { - XCTAssert((just(42).toArray()).get() == [42]) + XCTAssert(try! just(42).toArray() == [42]) } func testToArray_fail() { - XCTAssert(((failWith(testError) as Observable).toArray()).isFailure) + do { + try (failWith(testError) as Observable).toArray() + XCTFail("It should fail") + } + catch { + + } } func testToArray_someData() { - XCTAssert((sequenceOf(42, 43, 44, 45).toArray()).get() == [42, 43, 44, 45]) + XCTAssert(try! sequenceOf(42, 43, 44, 45).toArray() == [42, 43, 44, 45]) } func testToArray_withRealScheduler() { let scheduler = ConcurrentDispatchQueueScheduler(globalConcurrentQueuePriority: .Default) - let array = interval(0.001, scheduler) + let array = try! interval(0.001, scheduler) .take(10) .toArray() - XCTAssert(array.get() == Array(0..<10)) + XCTAssert(array == Array(0..<10)) } } @@ -52,29 +58,35 @@ extension ObservableBlockingTest { extension ObservableBlockingTest { func testFirst_empty() { - XCTAssert(((empty() as Observable).first).get() == nil) + XCTAssert(try! (empty() as Observable).first() == nil) } func testFirst_return() { - XCTAssert((just(42).first).get() == 42) + XCTAssert(try! just(42).first() == 42) } func testFirst_fail() { - XCTAssert(((failWith(testError) as Observable).first).isFailure) + do { + try (failWith(testError) as Observable).first() + XCTFail() + } + catch { + + } } func testFirst_someData() { - XCTAssert((sequenceOf(42, 43, 44, 45).first).get() == 42) + XCTAssert(try! sequenceOf(42, 43, 44, 45).first() == 42) } func testFirst_withRealScheduler() { let scheduler = ConcurrentDispatchQueueScheduler(globalConcurrentQueuePriority: .Default) - let array = interval(0.001, scheduler) + let array = try! interval(0.001, scheduler) .take(10) - .first + .first() - XCTAssert(array.get() == 0) + XCTAssert(array == 0) } } @@ -82,29 +94,35 @@ extension ObservableBlockingTest { extension ObservableBlockingTest { func testLast_empty() { - XCTAssert(((empty() as Observable).last).get() == nil) + XCTAssert(try! (empty() as Observable).last() == nil) } func testLast_return() { - XCTAssert((just(42).last).get() == 42) + XCTAssert(try! just(42).last() == 42) } func testLast_fail() { - XCTAssert(((failWith(testError) as Observable).last).isFailure) + do { + try (failWith(testError) as Observable).last() + XCTFail() + } + catch { + + } } func testLast_someData() { - XCTAssert((sequenceOf(42, 43, 44, 45).last).get() == 45) + XCTAssert(try! sequenceOf(42, 43, 44, 45).last() == 45) } func testLast_withRealScheduler() { let scheduler = ConcurrentDispatchQueueScheduler(globalConcurrentQueuePriority: .Default) - let array = interval(0.001, scheduler) + let array = try! interval(0.001, scheduler) .take(10) - .last + .last() - XCTAssert(array.get() == 9) + XCTAssert(array == 9) } } diff --git a/RxTests/RxSwiftTests/Tests/Observable+ConcurrencyTest.swift b/RxTests/RxSwiftTests/Tests/Observable+ConcurrencyTest.swift index 12c13ae9..3b204cbf 100644 --- a/RxTests/RxSwiftTests/Tests/Observable+ConcurrencyTest.swift +++ b/RxTests/RxSwiftTests/Tests/Observable+ConcurrencyTest.swift @@ -209,7 +209,7 @@ extension ObservableConcurrencyTest { scheduler.schedule(()) { s in OSSpinLockUnlock(&wait) - return NopDisposableResult + return NopDisposable.instance } OSSpinLockLock(&wait) @@ -500,7 +500,7 @@ class ObservableConcurrentSchedulerConcurrencyTest: ObservableConcurrencyTestBas var writtenStarted = 0 var writtenEnded = 0 - var concurrent = { () -> RxResult in + var concurrent = { () -> Disposable in self.performLocked { events.append("Started") } @@ -527,14 +527,14 @@ class ObservableConcurrentSchedulerConcurrencyTest: ObservableConcurrencyTestBas stop.on(.Completed) - return NopDisposableResult + return NopDisposable.instance } _ = scheduler.schedule((), action: concurrent) _ = scheduler.schedule((), action: concurrent) - let _ = stop.last + let _ = try! stop.last() XCTAssertEqual(events, ["Started", "Started", "Ended", "Ended"]) } diff --git a/RxTests/RxSwiftTests/Tests/Observable+TimeTest.swift b/RxTests/RxSwiftTests/Tests/Observable+TimeTest.swift index fdd59bc6..d6c85f33 100644 --- a/RxTests/RxSwiftTests/Tests/Observable+TimeTest.swift +++ b/RxTests/RxSwiftTests/Tests/Observable+TimeTest.swift @@ -270,14 +270,14 @@ extension ObservableTimeTest { let start = NSDate() - let a = from([just(0), never()]).concat() + let a = try! from([just(0), never()]).concat() .throttle(2.0, scheduler) - .first + .first() let end = NSDate() XCTAssertEqualWithAccuracy(2, end.timeIntervalSinceDate(start), accuracy: 0.5) - XCTAssertEqual(a.get()!, 0) + XCTAssertEqual(a, 0) } } @@ -742,7 +742,7 @@ extension ObservableTimeTest { } func testInterval_TimeSpan_Zero() { - let scheduler = PeriodicTestScheduler(initialClock: 0) + let scheduler = TestScheduler(initialClock: 0) let res = scheduler.start(210) { interval(0, scheduler) @@ -783,7 +783,7 @@ extension ObservableTimeTest { scheduler.schedule(()) { _ in OSSpinLockUnlock(&lock) - return NopDisposableResult + return NopDisposable.instance } // wait until dispatch queue cleans it's resources @@ -812,14 +812,14 @@ extension ObservableTimeTest { let start = NSDate() - let a = interval(1, scheduler) + let a = try! interval(1, scheduler) .take(2) .toArray() let end = NSDate() XCTAssertEqualWithAccuracy(2, end.timeIntervalSinceDate(start), accuracy: 0.3) - XCTAssertEqual(a.get(), [0, 1]) + XCTAssertEqual(a, [0, 1]) } }