builds ios, ios rx cocoa and ios rx blocking
This commit is contained in:
parent
0e38ecbc87
commit
c4cf2e0d12
|
|
@ -3108,8 +3108,15 @@
|
|||
LastUpgradeCheck = 0720;
|
||||
ORGANIZATIONNAME = "Krunoslav Zaher";
|
||||
TargetAttributes = {
|
||||
C80938F51B8A71760088E94D = {
|
||||
LastSwiftMigration = 0800;
|
||||
};
|
||||
C8093B4B1B8A71F00088E94D = {
|
||||
LastSwiftMigration = 0800;
|
||||
};
|
||||
C83508C21C386F6F0027C24C = {
|
||||
CreatedOnToolsVersion = 7.2;
|
||||
LastSwiftMigration = 0800;
|
||||
};
|
||||
C83509831C38740E0027C24C = {
|
||||
CreatedOnToolsVersion = 7.2;
|
||||
|
|
@ -3120,8 +3127,12 @@
|
|||
C85BA04A1C3878740075D68E = {
|
||||
CreatedOnToolsVersion = 7.2;
|
||||
};
|
||||
C88FA4FD1C25C44800CCFEA4 = {
|
||||
LastSwiftMigration = 0800;
|
||||
};
|
||||
C8A56AD61AD7424700B4673B = {
|
||||
CreatedOnToolsVersion = 6.3;
|
||||
LastSwiftMigration = 0800;
|
||||
};
|
||||
D2138C741BB9BE9800339B5C = {
|
||||
CreatedOnToolsVersion = 7.1;
|
||||
|
|
@ -4756,6 +4767,7 @@
|
|||
PRODUCT_NAME = RxCocoa;
|
||||
SDKROOT = iphoneos;
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_VERSION = 3.0;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
|
@ -4773,6 +4785,7 @@
|
|||
PRODUCT_NAME = RxCocoa;
|
||||
SDKROOT = iphoneos;
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_VERSION = 3.0;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
|
@ -4790,6 +4803,7 @@
|
|||
PRODUCT_NAME = RxCocoa;
|
||||
SDKROOT = iphoneos;
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_VERSION = 3.0;
|
||||
};
|
||||
name = "Release-Tests";
|
||||
};
|
||||
|
|
@ -4864,6 +4878,7 @@
|
|||
PRODUCT_NAME = RxBlocking;
|
||||
SDKROOT = iphoneos;
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_VERSION = 3.0;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
|
@ -4881,6 +4896,7 @@
|
|||
PRODUCT_NAME = RxBlocking;
|
||||
SDKROOT = iphoneos;
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_VERSION = 3.0;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
|
@ -4898,6 +4914,7 @@
|
|||
PRODUCT_NAME = RxBlocking;
|
||||
SDKROOT = iphoneos;
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_VERSION = 3.0;
|
||||
};
|
||||
name = "Release-Tests";
|
||||
};
|
||||
|
|
@ -4973,6 +4990,7 @@
|
|||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Tests/RxCocoaTests/RxTests-iOS-Bridging-Header.h";
|
||||
SWIFT_VERSION = 3.0;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
|
@ -4986,6 +5004,7 @@
|
|||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Tests/RxCocoaTests/RxTests-iOS-Bridging-Header.h";
|
||||
SWIFT_VERSION = 3.0;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
|
@ -4999,6 +5018,7 @@
|
|||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Tests/RxCocoaTests/RxTests-iOS-Bridging-Header.h";
|
||||
SWIFT_VERSION = 3.0;
|
||||
};
|
||||
name = "Release-Tests";
|
||||
};
|
||||
|
|
@ -5216,6 +5236,7 @@
|
|||
PRODUCT_NAME = RxSwift;
|
||||
SDKROOT = iphoneos;
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_VERSION = 3.0;
|
||||
};
|
||||
name = "Release-Tests";
|
||||
};
|
||||
|
|
@ -5294,6 +5315,7 @@
|
|||
PRODUCT_NAME = RxTests;
|
||||
SDKROOT = iphoneos;
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_VERSION = 3.0;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
|
@ -5315,6 +5337,7 @@
|
|||
PRODUCT_NAME = RxTests;
|
||||
SDKROOT = iphoneos;
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_VERSION = 3.0;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
|
@ -5336,6 +5359,7 @@
|
|||
PRODUCT_NAME = RxTests;
|
||||
SDKROOT = iphoneos;
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_VERSION = 3.0;
|
||||
};
|
||||
name = "Release-Tests";
|
||||
};
|
||||
|
|
@ -5662,6 +5686,7 @@
|
|||
PRODUCT_NAME = RxSwift;
|
||||
SDKROOT = iphoneos;
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_VERSION = 3.0;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
|
@ -5679,6 +5704,7 @@
|
|||
PRODUCT_NAME = RxSwift;
|
||||
SDKROOT = iphoneos;
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_VERSION = 3.0;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -34,13 +34,13 @@ extension BlockingObservable {
|
|||
return
|
||||
}
|
||||
switch e {
|
||||
case .Next(let element):
|
||||
case .next(let element):
|
||||
elements.append(element)
|
||||
case .Error(let e):
|
||||
case .error(let e):
|
||||
error = e
|
||||
d.dispose()
|
||||
lock.stop()
|
||||
case .Completed:
|
||||
case .completed:
|
||||
d.dispose()
|
||||
lock.stop()
|
||||
}
|
||||
|
|
@ -83,12 +83,12 @@ extension BlockingObservable {
|
|||
}
|
||||
|
||||
switch e {
|
||||
case .Next(let e):
|
||||
case .next(let e):
|
||||
if element == nil {
|
||||
element = e
|
||||
}
|
||||
break
|
||||
case .Error(let e):
|
||||
case .error(let e):
|
||||
error = e
|
||||
default:
|
||||
break
|
||||
|
|
@ -134,10 +134,10 @@ extension BlockingObservable {
|
|||
return
|
||||
}
|
||||
switch e {
|
||||
case .Next(let e):
|
||||
case .next(let e):
|
||||
element = e
|
||||
return
|
||||
case .Error(let e):
|
||||
case .error(let e):
|
||||
error = e
|
||||
default:
|
||||
break
|
||||
|
|
@ -180,7 +180,7 @@ extension BlockingObservable {
|
|||
- parameter predicate: A function to test each source element for a condition.
|
||||
- returns: Returns the only element of an sequence that satisfies the condition in the predicate, and reports an error if there is not exactly one element in the sequence.
|
||||
*/
|
||||
public func single(predicate: (E) throws -> Bool) throws -> E? {
|
||||
public func single(_ predicate: (E) throws -> Bool) throws -> E? {
|
||||
var element: E?
|
||||
|
||||
var error: ErrorProtocol?
|
||||
|
|
@ -195,7 +195,7 @@ extension BlockingObservable {
|
|||
return
|
||||
}
|
||||
switch e {
|
||||
case .Next(let e):
|
||||
case .next(let e):
|
||||
do {
|
||||
if try !predicate(e) {
|
||||
return
|
||||
|
|
@ -203,7 +203,7 @@ extension BlockingObservable {
|
|||
if element == nil {
|
||||
element = e
|
||||
} else {
|
||||
throw RxError.MoreThanOneElement
|
||||
throw RxError.moreThanOneElement
|
||||
}
|
||||
} catch (let err) {
|
||||
error = err
|
||||
|
|
@ -211,11 +211,11 @@ extension BlockingObservable {
|
|||
lock.stop()
|
||||
}
|
||||
return
|
||||
case .Error(let e):
|
||||
case .error(let e):
|
||||
error = e
|
||||
case .Completed:
|
||||
case .completed:
|
||||
if element == nil {
|
||||
error = RxError.NoElements
|
||||
error = RxError.noElements
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,8 +17,8 @@ extension ObservableConvertibleType {
|
|||
|
||||
- returns: `BlockingObservable` version of `self`
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func toBlocking() -> BlockingObservable<E> {
|
||||
return BlockingObservable(source: self.asObservable())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,10 +38,10 @@ class RunLoopLock {
|
|||
currentRunLoop = CFRunLoopGetCurrent()
|
||||
}
|
||||
|
||||
func dispatch(action: () -> ()) {
|
||||
CFRunLoopPerformBlock(currentRunLoop, kCFRunLoopDefaultMode) {
|
||||
func dispatch(_ action: () -> ()) {
|
||||
CFRunLoopPerformBlock(currentRunLoop, CFRunLoopMode.defaultMode as! CFTypeRef) {
|
||||
if CurrentThreadScheduler.isScheduleRequired {
|
||||
CurrentThreadScheduler.instance.schedule(state: ()) { _ in
|
||||
_ = CurrentThreadScheduler.instance.schedule(()) { _ in
|
||||
action()
|
||||
return NopDisposable.instance
|
||||
}
|
||||
|
|
@ -57,7 +57,7 @@ class RunLoopLock {
|
|||
if AtomicIncrement(&calledStop) != 1 {
|
||||
return
|
||||
}
|
||||
CFRunLoopPerformBlock(currentRunLoop, kCFRunLoopDefaultMode) {
|
||||
CFRunLoopPerformBlock(currentRunLoop, CFRunLoopMode.defaultMode as! CFTypeRef) {
|
||||
CFRunLoopStop(self.currentRunLoop)
|
||||
}
|
||||
CFRunLoopWakeUp(currentRunLoop)
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ extension CLLocationManager {
|
|||
Reactive wrapper for `delegate` message.
|
||||
*/
|
||||
public var rx_didUpdateLocations: Observable<[CLLocation]> {
|
||||
return rx_delegate.observe(selector: #selector(CLLocationManagerDelegate.locationManager(_:didUpdate:)))
|
||||
return rx_delegate.observe(#selector(CLLocationManagerDelegate.locationManager(_:didUpdateLocations:)))
|
||||
.map { a in
|
||||
return try castOrThrow([CLLocation].self, a[1])
|
||||
}
|
||||
|
|
@ -39,7 +39,7 @@ extension CLLocationManager {
|
|||
Reactive wrapper for `delegate` message.
|
||||
*/
|
||||
public var rx_didFailWithError: Observable<NSError> {
|
||||
return rx_delegate.observe(selector: #selector(CLLocationManagerDelegate.locationManager(_:didFailWithError:)))
|
||||
return rx_delegate.observe(#selector(CLLocationManagerDelegate.locationManager(_:didFailWithError:)))
|
||||
.map { a in
|
||||
return try castOrThrow(NSError.self, a[1])
|
||||
}
|
||||
|
|
@ -50,7 +50,7 @@ extension CLLocationManager {
|
|||
Reactive wrapper for `delegate` message.
|
||||
*/
|
||||
public var rx_didFinishDeferredUpdatesWithError: Observable<NSError?> {
|
||||
return rx_delegate.observe(selector: #selector(CLLocationManagerDelegate.locationManager(_:didFinishDeferredUpdatesWithError:)))
|
||||
return rx_delegate.observe(#selector(CLLocationManagerDelegate.locationManager(_:didFinishDeferredUpdatesWithError:)))
|
||||
.map { a in
|
||||
return try castOptionalOrThrow(NSError.self, a[1])
|
||||
}
|
||||
|
|
@ -65,7 +65,7 @@ extension CLLocationManager {
|
|||
Reactive wrapper for `delegate` message.
|
||||
*/
|
||||
public var rx_didPauseLocationUpdates: Observable<Void> {
|
||||
return rx_delegate.observe(selector: #selector(CLLocationManagerDelegate.locationManagerDidPauseLocationUpdates(_:)))
|
||||
return rx_delegate.observe(#selector(CLLocationManagerDelegate.locationManagerDidPauseLocationUpdates(_:)))
|
||||
.map { _ in
|
||||
return ()
|
||||
}
|
||||
|
|
@ -75,7 +75,7 @@ extension CLLocationManager {
|
|||
Reactive wrapper for `delegate` message.
|
||||
*/
|
||||
public var rx_didResumeLocationUpdates: Observable<Void> {
|
||||
return rx_delegate.observe(selector: #selector(CLLocationManagerDelegate.locationManagerDidResumeLocationUpdates(_:)))
|
||||
return rx_delegate.observe( #selector(CLLocationManagerDelegate.locationManagerDidResumeLocationUpdates(_:)))
|
||||
.map { _ in
|
||||
return ()
|
||||
}
|
||||
|
|
@ -87,7 +87,7 @@ extension CLLocationManager {
|
|||
Reactive wrapper for `delegate` message.
|
||||
*/
|
||||
public var rx_didUpdateHeading: Observable<CLHeading> {
|
||||
return rx_delegate.observe(selector: #selector(CLLocationManagerDelegate.locationManager(_:didUpdate:)))
|
||||
return rx_delegate.observe(#selector(CLLocationManagerDelegate.locationManager(_:didUpdateHeading:)))
|
||||
.map { a in
|
||||
return try castOrThrow(CLHeading.self, a[1])
|
||||
}
|
||||
|
|
@ -99,7 +99,7 @@ extension CLLocationManager {
|
|||
Reactive wrapper for `delegate` message.
|
||||
*/
|
||||
public var rx_didEnterRegion: Observable<CLRegion> {
|
||||
return rx_delegate.observe(selector: #selector(CLLocationManagerDelegate.locationManager(_:didEnter:)))
|
||||
return rx_delegate.observe(#selector(CLLocationManagerDelegate.locationManager(_:didEnterRegion:)))
|
||||
.map { a in
|
||||
return try castOrThrow(CLRegion.self, a[1])
|
||||
}
|
||||
|
|
@ -109,7 +109,7 @@ extension CLLocationManager {
|
|||
Reactive wrapper for `delegate` message.
|
||||
*/
|
||||
public var rx_didExitRegion: Observable<CLRegion> {
|
||||
return rx_delegate.observe(selector: #selector(CLLocationManagerDelegate.locationManager(_:didExitRegion:)))
|
||||
return rx_delegate.observe(#selector(CLLocationManagerDelegate.locationManager(_:didExitRegion:)))
|
||||
.map { a in
|
||||
return try castOrThrow(CLRegion.self, a[1])
|
||||
}
|
||||
|
|
@ -124,7 +124,7 @@ extension CLLocationManager {
|
|||
*/
|
||||
@available(OSX 10.10, *)
|
||||
public var rx_didDetermineStateForRegion: Observable<(state: CLRegionState, region: CLRegion)> {
|
||||
return rx_delegate.observe(selector: #selector(CLLocationManagerDelegate.locationManager(_:didDetermineState:for:)))
|
||||
return rx_delegate.observe(#selector(CLLocationManagerDelegate.locationManager(_:didDetermineState:for:)))
|
||||
.map { a in
|
||||
let stateNumber = try castOrThrow(NSNumber.self, a[1])
|
||||
let state = CLRegionState(rawValue: stateNumber.intValue) ?? CLRegionState.unknown
|
||||
|
|
@ -137,7 +137,7 @@ extension CLLocationManager {
|
|||
Reactive wrapper for `delegate` message.
|
||||
*/
|
||||
public var rx_monitoringDidFailForRegionWithError: Observable<(region: CLRegion?, error: NSError)> {
|
||||
return rx_delegate.observe(selector: #selector(CLLocationManagerDelegate.locationManager(_:monitoringDidFailFor:withError:)))
|
||||
return rx_delegate.observe(#selector(CLLocationManagerDelegate.locationManager(_:monitoringDidFailFor:withError:)))
|
||||
.map { a in
|
||||
let region = try castOptionalOrThrow(CLRegion.self, a[1])
|
||||
let error = try castOrThrow(NSError.self, a[2])
|
||||
|
|
@ -149,7 +149,7 @@ extension CLLocationManager {
|
|||
Reactive wrapper for `delegate` message.
|
||||
*/
|
||||
public var rx_didStartMonitoringForRegion: Observable<CLRegion> {
|
||||
return rx_delegate.observe(selector: #selector(CLLocationManagerDelegate.locationManager(_:didStartMonitoringFor:)))
|
||||
return rx_delegate.observe(#selector(CLLocationManagerDelegate.locationManager(_:didStartMonitoringFor:)))
|
||||
.map { a in
|
||||
return try castOrThrow(CLRegion.self, a[1])
|
||||
}
|
||||
|
|
@ -165,7 +165,7 @@ extension CLLocationManager {
|
|||
Reactive wrapper for `delegate` message.
|
||||
*/
|
||||
public var rx_didRangeBeaconsInRegion: Observable<(beacons: [CLBeacon], region: CLBeaconRegion)> {
|
||||
return rx_delegate.observe(selector: #selector(CLLocationManagerDelegate.locationManager(_:didRangeBeacons:in:)))
|
||||
return rx_delegate.observe(#selector(CLLocationManagerDelegate.locationManager(_:didRangeBeacons:in:)))
|
||||
.map { a in
|
||||
let beacons = try castOrThrow([CLBeacon].self, a[1])
|
||||
let region = try castOrThrow(CLBeaconRegion.self, a[2])
|
||||
|
|
@ -177,7 +177,7 @@ extension CLLocationManager {
|
|||
Reactive wrapper for `delegate` message.
|
||||
*/
|
||||
public var rx_rangingBeaconsDidFailForRegionWithError: Observable<(region: CLBeaconRegion, error: NSError)> {
|
||||
return rx_delegate.observe(selector: #selector(CLLocationManagerDelegate.locationManager(_:rangingBeaconsDidFailFor:withError:)))
|
||||
return rx_delegate.observe(#selector(CLLocationManagerDelegate.locationManager(_:rangingBeaconsDidFailFor:withError:)))
|
||||
.map { a in
|
||||
let region = try castOrThrow(CLBeaconRegion.self, a[1])
|
||||
let error = try castOrThrow(NSError.self, a[2])
|
||||
|
|
@ -192,7 +192,7 @@ extension CLLocationManager {
|
|||
*/
|
||||
@available(iOS 8.0, *)
|
||||
public var rx_didVisit: Observable<CLVisit> {
|
||||
return rx_delegate.observe(selector: #selector(CLLocationManagerDelegate.locationManager(_:didVisit:)))
|
||||
return rx_delegate.observe(#selector(CLLocationManagerDelegate.locationManager(_:didVisit:)))
|
||||
.map { a in
|
||||
return try castOrThrow(CLVisit.self, a[1])
|
||||
}
|
||||
|
|
@ -206,7 +206,7 @@ extension CLLocationManager {
|
|||
Reactive wrapper for `delegate` message.
|
||||
*/
|
||||
public var rx_didChangeAuthorizationStatus: Observable<CLAuthorizationStatus> {
|
||||
return rx_delegate.observe(selector: #selector(CLLocationManagerDelegate.locationManager(_:didChange:)))
|
||||
return rx_delegate.observe(#selector(CLLocationManagerDelegate.locationManager(_:didChangeAuthorization:)))
|
||||
.map { a in
|
||||
let number = try castOrThrow(NSNumber.self, a[1])
|
||||
return CLAuthorizationStatus(rawValue: Int32(number.intValue)) ?? .notDetermined
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ public struct ControlEvent<PropertyType> : ControlEventType {
|
|||
- returns: Control event created with a observable sequence of events.
|
||||
*/
|
||||
public init<Ev: ObservableType where Ev.E == E>(events: Ev) {
|
||||
_events = events.subscribeOn(scheduler: ConcurrentMainScheduler.instance)
|
||||
_events = events.subscribeOn(ConcurrentMainScheduler.instance)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -64,14 +64,14 @@ public struct ControlEvent<PropertyType> : ControlEventType {
|
|||
- parameter observer: Observer to subscribe to events.
|
||||
- returns: Disposable object that can be used to unsubscribe the observer from receiving control events.
|
||||
*/
|
||||
public func subscribe<O : ObserverType where O.E == E>(observer: O) -> Disposable {
|
||||
return _events.subscribe(observer: observer)
|
||||
public func subscribe<O : ObserverType where O.E == E>(_ observer: O) -> Disposable {
|
||||
return _events.subscribe(observer)
|
||||
}
|
||||
|
||||
/**
|
||||
- returns: `Observable` interface.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func asObservable() -> Observable<E> {
|
||||
return _events
|
||||
}
|
||||
|
|
@ -79,7 +79,7 @@ public struct ControlEvent<PropertyType> : ControlEventType {
|
|||
/**
|
||||
- returns: `ControlEvent` interface.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func asControlEvent() -> ControlEvent<E> {
|
||||
return self
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ public struct ControlProperty<PropertyType> : ControlPropertyType {
|
|||
to property.
|
||||
*/
|
||||
public init<V: ObservableType, S: ObserverType where E == V.E, E == S.E>(values: V, valueSink: S) {
|
||||
_values = values.subscribeOn(scheduler: ConcurrentMainScheduler.instance)
|
||||
_values = values.subscribeOn(ConcurrentMainScheduler.instance)
|
||||
_valueSink = valueSink.asObserver()
|
||||
}
|
||||
|
||||
|
|
@ -70,14 +70,14 @@ public struct ControlProperty<PropertyType> : ControlPropertyType {
|
|||
- parameter observer: Observer to subscribe to property values.
|
||||
- returns: Disposable object that can be used to unsubscribe the observer from receiving control property values.
|
||||
*/
|
||||
public func subscribe<O : ObserverType where O.E == E>(observer: O) -> Disposable {
|
||||
return _values.subscribe(observer: observer)
|
||||
public func subscribe<O : ObserverType where O.E == E>(_ observer: O) -> Disposable {
|
||||
return _values.subscribe(observer)
|
||||
}
|
||||
|
||||
/**
|
||||
- returns: `Observable` interface.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func asObservable() -> Observable<E> {
|
||||
return _values
|
||||
}
|
||||
|
|
@ -85,7 +85,7 @@ public struct ControlProperty<PropertyType> : ControlPropertyType {
|
|||
/**
|
||||
- returns: `ControlProperty` interface.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func asControlProperty() -> ControlProperty<E> {
|
||||
return self
|
||||
}
|
||||
|
|
@ -97,14 +97,14 @@ public struct ControlProperty<PropertyType> : ControlPropertyType {
|
|||
- In case error is received, DEBUG buids raise fatal error, RELEASE builds log event to standard output.
|
||||
- In case sequence completes, nothing happens.
|
||||
*/
|
||||
public func on(event: Event<E>) {
|
||||
public func on(_ event: Event<E>) {
|
||||
switch event {
|
||||
case .Error(let error):
|
||||
case .error(let error):
|
||||
bindingErrorToInterface(error)
|
||||
case .Next:
|
||||
_valueSink.on(event: event)
|
||||
case .Completed:
|
||||
_valueSink.on(event: event)
|
||||
case .next:
|
||||
_valueSink.on(event)
|
||||
case .completed:
|
||||
_valueSink.on(event)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ extension ControlEvent {
|
|||
|
||||
`ControlEvent` already can't fail, so no special case needs to be handled.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func asDriver() -> Driver<E> {
|
||||
return self.asDriver { (error) -> Driver<E> in
|
||||
#if DEBUG
|
||||
|
|
@ -27,4 +27,4 @@ extension ControlEvent {
|
|||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ extension ControlProperty {
|
|||
|
||||
`ControlProperty` already can't fail, so no special case needs to be handled.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func asDriver() -> Driver<E> {
|
||||
return self.asDriver { (error) -> Driver<E> in
|
||||
#if DEBUG
|
||||
|
|
@ -27,4 +27,4 @@ extension ControlProperty {
|
|||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,9 +23,9 @@ extension Driver {
|
|||
- parameter resultSelector: Function to invoke for each series of elements at corresponding indexes in the sources.
|
||||
- returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public static func zip<O1: DriverConvertibleType, O2: DriverConvertibleType>
|
||||
(source1: O1, _ source2: O2, resultSelector: (O1.E, O2.E) throws -> E)
|
||||
(_ source1: O1, _ source2: O2, resultSelector: (O1.E, O2.E) throws -> E)
|
||||
-> Driver<E> {
|
||||
let source = Observable.zip(
|
||||
source1.asDriver().asObservable(), source2.asDriver().asObservable(),
|
||||
|
|
@ -43,9 +43,9 @@ extension Driver {
|
|||
- parameter resultSelector: Function to invoke whenever any of the sources produces an element.
|
||||
- returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public static func combineLatest<O1: DriverConvertibleType, O2: DriverConvertibleType>
|
||||
(source1: O1, _ source2: O2, resultSelector: (O1.E, O2.E) throws -> E)
|
||||
(_ source1: O1, _ source2: O2, resultSelector: (O1.E, O2.E) throws -> E)
|
||||
-> Driver<E> {
|
||||
let source = Observable.combineLatest(
|
||||
source1.asDriver().asObservable(), source2.asDriver().asObservable(),
|
||||
|
|
@ -67,9 +67,9 @@ extension Driver {
|
|||
- parameter resultSelector: Function to invoke for each series of elements at corresponding indexes in the sources.
|
||||
- returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public static func zip<O1: DriverConvertibleType, O2: DriverConvertibleType, O3: DriverConvertibleType>
|
||||
(source1: O1, _ source2: O2, _ source3: O3, resultSelector: (O1.E, O2.E, O3.E) throws -> E)
|
||||
(_ source1: O1, _ source2: O2, _ source3: O3, resultSelector: (O1.E, O2.E, O3.E) throws -> E)
|
||||
-> Driver<E> {
|
||||
let source = Observable.zip(
|
||||
source1.asDriver().asObservable(), source2.asDriver().asObservable(), source3.asDriver().asObservable(),
|
||||
|
|
@ -87,9 +87,9 @@ extension Driver {
|
|||
- parameter resultSelector: Function to invoke whenever any of the sources produces an element.
|
||||
- returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public static func combineLatest<O1: DriverConvertibleType, O2: DriverConvertibleType, O3: DriverConvertibleType>
|
||||
(source1: O1, _ source2: O2, _ source3: O3, resultSelector: (O1.E, O2.E, O3.E) throws -> E)
|
||||
(_ source1: O1, _ source2: O2, _ source3: O3, resultSelector: (O1.E, O2.E, O3.E) throws -> E)
|
||||
-> Driver<E> {
|
||||
let source = Observable.combineLatest(
|
||||
source1.asDriver().asObservable(), source2.asDriver().asObservable(), source3.asDriver().asObservable(),
|
||||
|
|
@ -111,9 +111,9 @@ extension Driver {
|
|||
- parameter resultSelector: Function to invoke for each series of elements at corresponding indexes in the sources.
|
||||
- returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public static func zip<O1: DriverConvertibleType, O2: DriverConvertibleType, O3: DriverConvertibleType, O4: DriverConvertibleType>
|
||||
(source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, resultSelector: (O1.E, O2.E, O3.E, O4.E) throws -> E)
|
||||
(_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, resultSelector: (O1.E, O2.E, O3.E, O4.E) throws -> E)
|
||||
-> Driver<E> {
|
||||
let source = Observable.zip(
|
||||
source1.asDriver().asObservable(), source2.asDriver().asObservable(), source3.asDriver().asObservable(), source4.asDriver().asObservable(),
|
||||
|
|
@ -131,9 +131,9 @@ extension Driver {
|
|||
- parameter resultSelector: Function to invoke whenever any of the sources produces an element.
|
||||
- returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public static func combineLatest<O1: DriverConvertibleType, O2: DriverConvertibleType, O3: DriverConvertibleType, O4: DriverConvertibleType>
|
||||
(source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, resultSelector: (O1.E, O2.E, O3.E, O4.E) throws -> E)
|
||||
(_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, resultSelector: (O1.E, O2.E, O3.E, O4.E) throws -> E)
|
||||
-> Driver<E> {
|
||||
let source = Observable.combineLatest(
|
||||
source1.asDriver().asObservable(), source2.asDriver().asObservable(), source3.asDriver().asObservable(), source4.asDriver().asObservable(),
|
||||
|
|
@ -155,9 +155,9 @@ extension Driver {
|
|||
- parameter resultSelector: Function to invoke for each series of elements at corresponding indexes in the sources.
|
||||
- returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public static func zip<O1: DriverConvertibleType, O2: DriverConvertibleType, O3: DriverConvertibleType, O4: DriverConvertibleType, O5: DriverConvertibleType>
|
||||
(source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, resultSelector: (O1.E, O2.E, O3.E, O4.E, O5.E) throws -> E)
|
||||
(_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, resultSelector: (O1.E, O2.E, O3.E, O4.E, O5.E) throws -> E)
|
||||
-> Driver<E> {
|
||||
let source = Observable.zip(
|
||||
source1.asDriver().asObservable(), source2.asDriver().asObservable(), source3.asDriver().asObservable(), source4.asDriver().asObservable(), source5.asDriver().asObservable(),
|
||||
|
|
@ -175,9 +175,9 @@ extension Driver {
|
|||
- parameter resultSelector: Function to invoke whenever any of the sources produces an element.
|
||||
- returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public static func combineLatest<O1: DriverConvertibleType, O2: DriverConvertibleType, O3: DriverConvertibleType, O4: DriverConvertibleType, O5: DriverConvertibleType>
|
||||
(source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, resultSelector: (O1.E, O2.E, O3.E, O4.E, O5.E) throws -> E)
|
||||
(_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, resultSelector: (O1.E, O2.E, O3.E, O4.E, O5.E) throws -> E)
|
||||
-> Driver<E> {
|
||||
let source = Observable.combineLatest(
|
||||
source1.asDriver().asObservable(), source2.asDriver().asObservable(), source3.asDriver().asObservable(), source4.asDriver().asObservable(), source5.asDriver().asObservable(),
|
||||
|
|
@ -199,9 +199,9 @@ extension Driver {
|
|||
- parameter resultSelector: Function to invoke for each series of elements at corresponding indexes in the sources.
|
||||
- returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public static func zip<O1: DriverConvertibleType, O2: DriverConvertibleType, O3: DriverConvertibleType, O4: DriverConvertibleType, O5: DriverConvertibleType, O6: DriverConvertibleType>
|
||||
(source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, resultSelector: (O1.E, O2.E, O3.E, O4.E, O5.E, O6.E) throws -> E)
|
||||
(_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, resultSelector: (O1.E, O2.E, O3.E, O4.E, O5.E, O6.E) throws -> E)
|
||||
-> Driver<E> {
|
||||
let source = Observable.zip(
|
||||
source1.asDriver().asObservable(), source2.asDriver().asObservable(), source3.asDriver().asObservable(), source4.asDriver().asObservable(), source5.asDriver().asObservable(), source6.asDriver().asObservable(),
|
||||
|
|
@ -219,9 +219,9 @@ extension Driver {
|
|||
- parameter resultSelector: Function to invoke whenever any of the sources produces an element.
|
||||
- returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public static func combineLatest<O1: DriverConvertibleType, O2: DriverConvertibleType, O3: DriverConvertibleType, O4: DriverConvertibleType, O5: DriverConvertibleType, O6: DriverConvertibleType>
|
||||
(source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, resultSelector: (O1.E, O2.E, O3.E, O4.E, O5.E, O6.E) throws -> E)
|
||||
(_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, resultSelector: (O1.E, O2.E, O3.E, O4.E, O5.E, O6.E) throws -> E)
|
||||
-> Driver<E> {
|
||||
let source = Observable.combineLatest(
|
||||
source1.asDriver().asObservable(), source2.asDriver().asObservable(), source3.asDriver().asObservable(), source4.asDriver().asObservable(), source5.asDriver().asObservable(), source6.asDriver().asObservable(),
|
||||
|
|
@ -243,9 +243,9 @@ extension Driver {
|
|||
- parameter resultSelector: Function to invoke for each series of elements at corresponding indexes in the sources.
|
||||
- returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public static func zip<O1: DriverConvertibleType, O2: DriverConvertibleType, O3: DriverConvertibleType, O4: DriverConvertibleType, O5: DriverConvertibleType, O6: DriverConvertibleType, O7: DriverConvertibleType>
|
||||
(source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, _ source7: O7, resultSelector: (O1.E, O2.E, O3.E, O4.E, O5.E, O6.E, O7.E) throws -> E)
|
||||
(_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, _ source7: O7, resultSelector: (O1.E, O2.E, O3.E, O4.E, O5.E, O6.E, O7.E) throws -> E)
|
||||
-> Driver<E> {
|
||||
let source = Observable.zip(
|
||||
source1.asDriver().asObservable(), source2.asDriver().asObservable(), source3.asDriver().asObservable(), source4.asDriver().asObservable(), source5.asDriver().asObservable(), source6.asDriver().asObservable(), source7.asDriver().asObservable(),
|
||||
|
|
@ -263,9 +263,9 @@ extension Driver {
|
|||
- parameter resultSelector: Function to invoke whenever any of the sources produces an element.
|
||||
- returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public static func combineLatest<O1: DriverConvertibleType, O2: DriverConvertibleType, O3: DriverConvertibleType, O4: DriverConvertibleType, O5: DriverConvertibleType, O6: DriverConvertibleType, O7: DriverConvertibleType>
|
||||
(source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, _ source7: O7, resultSelector: (O1.E, O2.E, O3.E, O4.E, O5.E, O6.E, O7.E) throws -> E)
|
||||
(_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, _ source7: O7, resultSelector: (O1.E, O2.E, O3.E, O4.E, O5.E, O6.E, O7.E) throws -> E)
|
||||
-> Driver<E> {
|
||||
let source = Observable.combineLatest(
|
||||
source1.asDriver().asObservable(), source2.asDriver().asObservable(), source3.asDriver().asObservable(), source4.asDriver().asObservable(), source5.asDriver().asObservable(), source6.asDriver().asObservable(), source7.asDriver().asObservable(),
|
||||
|
|
@ -287,9 +287,9 @@ extension Driver {
|
|||
- parameter resultSelector: Function to invoke for each series of elements at corresponding indexes in the sources.
|
||||
- returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public static func zip<O1: DriverConvertibleType, O2: DriverConvertibleType, O3: DriverConvertibleType, O4: DriverConvertibleType, O5: DriverConvertibleType, O6: DriverConvertibleType, O7: DriverConvertibleType, O8: DriverConvertibleType>
|
||||
(source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, _ source7: O7, _ source8: O8, resultSelector: (O1.E, O2.E, O3.E, O4.E, O5.E, O6.E, O7.E, O8.E) throws -> E)
|
||||
(_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, _ source7: O7, _ source8: O8, resultSelector: (O1.E, O2.E, O3.E, O4.E, O5.E, O6.E, O7.E, O8.E) throws -> E)
|
||||
-> Driver<E> {
|
||||
let source = Observable.zip(
|
||||
source1.asDriver().asObservable(), source2.asDriver().asObservable(), source3.asDriver().asObservable(), source4.asDriver().asObservable(), source5.asDriver().asObservable(), source6.asDriver().asObservable(), source7.asDriver().asObservable(), source8.asDriver().asObservable(),
|
||||
|
|
@ -307,9 +307,9 @@ extension Driver {
|
|||
- parameter resultSelector: Function to invoke whenever any of the sources produces an element.
|
||||
- returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public static func combineLatest<O1: DriverConvertibleType, O2: DriverConvertibleType, O3: DriverConvertibleType, O4: DriverConvertibleType, O5: DriverConvertibleType, O6: DriverConvertibleType, O7: DriverConvertibleType, O8: DriverConvertibleType>
|
||||
(source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, _ source7: O7, _ source8: O8, resultSelector: (O1.E, O2.E, O3.E, O4.E, O5.E, O6.E, O7.E, O8.E) throws -> E)
|
||||
(_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, _ source7: O7, _ source8: O8, resultSelector: (O1.E, O2.E, O3.E, O4.E, O5.E, O6.E, O7.E, O8.E) throws -> E)
|
||||
-> Driver<E> {
|
||||
let source = Observable.combineLatest(
|
||||
source1.asDriver().asObservable(), source2.asDriver().asObservable(), source3.asDriver().asObservable(), source4.asDriver().asObservable(), source5.asDriver().asObservable(), source6.asDriver().asObservable(), source7.asDriver().asObservable(), source8.asDriver().asObservable(),
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ extension Driver {
|
|||
- parameter resultSelector: Function to invoke for each series of elements at corresponding indexes in the sources.
|
||||
- returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public static func zip<<%= (Array(1...i).map { "O\($0): DriverConvertibleType" }).joinWithSeparator(", ") %>>
|
||||
(<%= (Array(1...i).map { "source\($0): O\($0)" }).joinWithSeparator(", _ ") %>, resultSelector: (<%= (Array(1...i).map { "O\($0).E" }).joinWithSeparator(", ") %>) throws -> E)
|
||||
-> Driver<E> {
|
||||
|
|
@ -42,7 +42,7 @@ extension Driver {
|
|||
- parameter resultSelector: Function to invoke whenever any of the sources produces an element.
|
||||
- returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public static func combineLatest<<%= (Array(1...i).map { "O\($0): DriverConvertibleType" }).joinWithSeparator(", ") %>>
|
||||
(<%= (Array(1...i).map { "source\($0): O\($0)" }).joinWithSeparator(", _ ") %>, resultSelector: (<%= (Array(1...i).map { "O\($0).E" }).joinWithSeparator(", ") %>) throws -> E)
|
||||
-> Driver<E> {
|
||||
|
|
@ -55,4 +55,4 @@ extension Driver {
|
|||
}
|
||||
}
|
||||
|
||||
<% } %>
|
||||
<% } %>
|
||||
|
|
|
|||
|
|
@ -20,11 +20,11 @@ extension DriverConvertibleType {
|
|||
- parameter selector: A transform function to apply to each source element.
|
||||
- returns: An observable sequence whose elements are the result of invoking the transform function on each element of source.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func map<R>(selector: E -> R) -> Driver<R> {
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func map<R>(_ selector: (E) -> R) -> Driver<R> {
|
||||
let source = self
|
||||
.asObservable()
|
||||
.map(selector: selector)
|
||||
.map(selector)
|
||||
return Driver<R>(source)
|
||||
}
|
||||
}
|
||||
|
|
@ -37,11 +37,11 @@ extension DriverConvertibleType {
|
|||
- parameter predicate: A function to test each source element for a condition.
|
||||
- returns: An observable sequence that contains elements from the input sequence that satisfy the condition.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func filter(predicate: (E) -> Bool) -> Driver<E> {
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func filter(_ predicate: (E) -> Bool) -> Driver<E> {
|
||||
let source = self
|
||||
.asObservable()
|
||||
.filter(predicate: predicate)
|
||||
.filter(predicate)
|
||||
return Driver(source)
|
||||
}
|
||||
}
|
||||
|
|
@ -58,7 +58,7 @@ extension DriverConvertibleType where E : DriverConvertibleType {
|
|||
|
||||
- returns: The observable sequence that at any point in time produces the elements of the most recent inner observable sequence that has been received.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func switchLatest() -> Driver<E.E> {
|
||||
let source: Observable<E.E> = self
|
||||
.asObservable()
|
||||
|
|
@ -80,12 +80,12 @@ extension DriverConvertibleType {
|
|||
- returns: An observable sequence whose elements are the result of invoking the transform function on each element of source producing an
|
||||
Observable of Observable sequences and that at any point in time produces the elements of the most recent inner observable sequence that has been received.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func flatMapLatest<R>(selector: (E) -> Driver<R>)
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func flatMapLatest<R>(_ selector: (E) -> Driver<R>)
|
||||
-> Driver<R> {
|
||||
let source: Observable<R> = self
|
||||
.asObservable()
|
||||
.flatMapLatest(selector: selector)
|
||||
.flatMapLatest(selector)
|
||||
return Driver<R>(source)
|
||||
}
|
||||
}
|
||||
|
|
@ -100,12 +100,12 @@ extension DriverConvertibleType {
|
|||
- parameter selector: A transform function to apply to element that was observed while no observable is executing in parallel.
|
||||
- returns: An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence that was received while no other sequence was being calculated.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func flatMapFirst<R>(selector: (E) -> Driver<R>)
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func flatMapFirst<R>(_ selector: (E) -> Driver<R>)
|
||||
-> Driver<R> {
|
||||
let source: Observable<R> = self
|
||||
.asObservable()
|
||||
.flatMapFirst(selector: selector)
|
||||
.flatMapFirst(selector)
|
||||
return Driver<R>(source)
|
||||
}
|
||||
}
|
||||
|
|
@ -119,8 +119,8 @@ extension DriverConvertibleType {
|
|||
- parameter eventHandler: Action to invoke for each event in the observable sequence.
|
||||
- returns: The source sequence with the side-effecting behavior applied.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func doOn(eventHandler: (Event<E>) -> Void)
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func doOn(_ eventHandler: (Event<E>) -> Void)
|
||||
-> Driver<E> {
|
||||
let source = self.asObservable()
|
||||
.doOn(eventHandler: eventHandler)
|
||||
|
|
@ -136,8 +136,8 @@ extension DriverConvertibleType {
|
|||
- parameter onCompleted: Action to invoke upon graceful termination of the observable sequence.
|
||||
- returns: The source sequence with the side-effecting behavior applied.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func doOn(onNext: (E -> Void)? = nil, onError: (ErrorProtocol -> Void)? = nil, onCompleted: (() -> Void)? = nil)
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func doOn(_ onNext: ((E) -> Void)? = nil, onError: ((ErrorProtocol) -> Void)? = nil, onCompleted: (() -> Void)? = nil)
|
||||
-> Driver<E> {
|
||||
let source = self.asObservable()
|
||||
.doOn(onNext: onNext, onError: onError, onCompleted: onCompleted)
|
||||
|
|
@ -151,10 +151,10 @@ extension DriverConvertibleType {
|
|||
- parameter onNext: Action to invoke for each element in the observable sequence.
|
||||
- returns: The source sequence with the side-effecting behavior applied.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func doOnNext(onNext: (E -> Void))
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func doOnNext(_ onNext: ((E) -> Void))
|
||||
-> Driver<E> {
|
||||
return self.doOn(onNext: onNext)
|
||||
return self.doOn(onNext)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -163,8 +163,8 @@ extension DriverConvertibleType {
|
|||
- parameter onCompleted: Action to invoke upon graceful termination of the observable sequence.
|
||||
- returns: The source sequence with the side-effecting behavior applied.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func doOnCompleted(onCompleted: (() -> Void))
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func doOnCompleted(_ onCompleted: (() -> Void))
|
||||
-> Driver<E> {
|
||||
return self.doOn(onCompleted: onCompleted)
|
||||
}
|
||||
|
|
@ -179,10 +179,10 @@ extension DriverConvertibleType {
|
|||
- parameter identifier: Identifier that is printed together with event description to standard output.
|
||||
- returns: An observable sequence whose events are printed to standard output.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func debug(identifier: String? = nil, file: String = #file, line: UInt = #line, function: String = #function) -> Driver<E> {
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func debug(_ identifier: String? = nil, file: String = #file, line: UInt = #line, function: String = #function) -> Driver<E> {
|
||||
let source = self.asObservable()
|
||||
.debug(identifier: identifier, file: file, line: line, function: function)
|
||||
.debug(identifier, file: file, line: line, function: function)
|
||||
return Driver(source)
|
||||
}
|
||||
}
|
||||
|
|
@ -195,7 +195,7 @@ extension DriverConvertibleType where E: Equatable {
|
|||
|
||||
- returns: An observable sequence only containing the distinct contiguous elements, based on equality operator, from the source sequence.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func distinctUntilChanged()
|
||||
-> Driver<E> {
|
||||
let source = self.asObservable()
|
||||
|
|
@ -213,8 +213,8 @@ extension DriverConvertibleType {
|
|||
- parameter keySelector: A function to compute the comparison key for each element.
|
||||
- returns: An observable sequence only containing the distinct contiguous elements, based on a computed key value, from the source sequence.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func distinctUntilChanged<K: Equatable>(keySelector: (E) -> K) -> Driver<E> {
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func distinctUntilChanged<K: Equatable>(_ keySelector: (E) -> K) -> Driver<E> {
|
||||
let source = self.asObservable()
|
||||
.distinctUntilChanged(keySelector: keySelector, comparer: { $0 == $1 })
|
||||
return Driver(source)
|
||||
|
|
@ -226,8 +226,8 @@ extension DriverConvertibleType {
|
|||
- parameter comparer: Equality comparer for computed key values.
|
||||
- returns: An observable sequence only containing the distinct contiguous elements, based on `comparer`, from the source sequence.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func distinctUntilChanged(comparer: (lhs: E, rhs: E) -> Bool) -> Driver<E> {
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func distinctUntilChanged(_ comparer: (lhs: E, rhs: E) -> Bool) -> Driver<E> {
|
||||
let source = self.asObservable()
|
||||
.distinctUntilChanged(keySelector: { $0 }, comparer: comparer)
|
||||
return Driver(source)
|
||||
|
|
@ -240,8 +240,8 @@ extension DriverConvertibleType {
|
|||
- parameter comparer: Equality comparer for computed key values.
|
||||
- returns: An observable sequence only containing the distinct contiguous elements, based on a computed key value and the comparer, from the source sequence.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func distinctUntilChanged<K>(keySelector: (E) -> K, comparer: (lhs: K, rhs: K) -> Bool) -> Driver<E> {
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func distinctUntilChanged<K>(_ keySelector: (E) -> K, comparer: (lhs: K, rhs: K) -> Bool) -> Driver<E> {
|
||||
let source = self.asObservable()
|
||||
.distinctUntilChanged(keySelector: keySelector, comparer: comparer)
|
||||
return Driver(source)
|
||||
|
|
@ -258,10 +258,10 @@ extension DriverConvertibleType {
|
|||
- parameter selector: A transform function to apply to each element.
|
||||
- returns: An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func flatMap<R>(selector: (E) -> Driver<R>) -> Driver<R> {
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func flatMap<R>(_ selector: (E) -> Driver<R>) -> Driver<R> {
|
||||
let source = self.asObservable()
|
||||
.flatMap(selector: selector)
|
||||
.flatMap(selector)
|
||||
|
||||
return Driver<R>(source)
|
||||
}
|
||||
|
|
@ -276,7 +276,7 @@ extension DriverConvertibleType where E : DriverConvertibleType {
|
|||
- parameter maxConcurrent: Maximum number of inner observable sequences being subscribed to concurrently.
|
||||
- returns: The observable sequence that merges the elements of the observable sequences.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func merge() -> Driver<E.E> {
|
||||
let source = self.asObservable()
|
||||
.map { $0.asDriver() }
|
||||
|
|
@ -289,12 +289,12 @@ extension DriverConvertibleType where E : DriverConvertibleType {
|
|||
|
||||
- returns: The observable sequence that merges the elements of the inner sequences.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func merge(maxConcurrent: Int)
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func merge(_ maxConcurrent: Int)
|
||||
-> Driver<E.E> {
|
||||
let source = self.asObservable()
|
||||
.map { $0.asDriver() }
|
||||
.merge(maxConcurrent: maxConcurrent)
|
||||
.merge( maxConcurrent)
|
||||
return Driver<E.E>(source)
|
||||
}
|
||||
}
|
||||
|
|
@ -310,11 +310,11 @@ extension DriverConvertibleType {
|
|||
- parameter dueTime: Throttling duration for each element.
|
||||
- returns: The throttled sequence.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func throttle(dueTime: RxTimeInterval)
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func throttle(_ dueTime: RxTimeInterval)
|
||||
-> Driver<E> {
|
||||
let source = self.asObservable()
|
||||
.throttle(dueTime: dueTime, scheduler: driverObserveOnScheduler)
|
||||
.throttle(dueTime, scheduler: driverObserveOnScheduler)
|
||||
|
||||
return Driver(source)
|
||||
}
|
||||
|
|
@ -327,11 +327,11 @@ extension DriverConvertibleType {
|
|||
- parameter dueTime: Throttling duration for each element.
|
||||
- returns: The throttled sequence.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func debounce(dueTime: RxTimeInterval)
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func debounce(_ dueTime: RxTimeInterval)
|
||||
-> Driver<E> {
|
||||
let source = self.asObservable()
|
||||
.debounce(dueTime: dueTime, scheduler: driverObserveOnScheduler)
|
||||
.debounce(dueTime, scheduler: driverObserveOnScheduler)
|
||||
|
||||
return Driver(source)
|
||||
}
|
||||
|
|
@ -348,8 +348,8 @@ extension DriverConvertibleType {
|
|||
- parameter accumulator: An accumulator function to be invoked on each element.
|
||||
- returns: An observable sequence containing the accumulated values.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func scan<A>(seed: A, accumulator: (A, E) -> A)
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func scan<A>(_ seed: A, accumulator: (A, E) -> A)
|
||||
-> Driver<A> {
|
||||
let source = self.asObservable()
|
||||
.scan(seed: seed, accumulator: accumulator)
|
||||
|
|
@ -365,7 +365,7 @@ extension Sequence where Iterator.Element : DriverConvertibleType {
|
|||
|
||||
- returns: An observable sequence that contains the elements of each given sequence, in sequential order.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func concat()
|
||||
-> Driver<Iterator.Element.E> {
|
||||
let source = self.lazy.map { $0.asDriver().asObservable() }.concat()
|
||||
|
|
@ -380,7 +380,7 @@ extension Collection where Iterator.Element : DriverConvertibleType {
|
|||
|
||||
- returns: An observable sequence that contains the elements of each given sequence, in sequential order.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func concat()
|
||||
-> Driver<Generator.Element.E> {
|
||||
let source = self.map { $0.asDriver().asObservable() }.concat()
|
||||
|
|
@ -397,9 +397,9 @@ extension Collection where Iterator.Element : DriverConvertibleType {
|
|||
- parameter resultSelector: Function to invoke for each series of elements at corresponding indexes in the sources.
|
||||
- returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func zip<R>(resultSelector: [Generator.Element.E] throws -> R) -> Driver<R> {
|
||||
let source = self.map { $0.asDriver().asObservable() }.zip(resultSelector: resultSelector)
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func zip<R>(_ resultSelector: ([Generator.Element.E]) throws -> R) -> Driver<R> {
|
||||
let source = self.map { $0.asDriver().asObservable() }.zip(resultSelector)
|
||||
return Driver<R>(source)
|
||||
}
|
||||
}
|
||||
|
|
@ -413,9 +413,9 @@ extension Collection where Iterator.Element : DriverConvertibleType {
|
|||
- parameter resultSelector: Function to invoke whenever any of the sources produces an element.
|
||||
- returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func combineLatest<R>(resultSelector: [Generator.Element.E] throws -> R) -> Driver<R> {
|
||||
let source = self.map { $0.asDriver().asObservable() }.combineLatest(resultSelector: resultSelector)
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func combineLatest<R>(_ resultSelector: ([Generator.Element.E]) throws -> R) -> Driver<R> {
|
||||
let source = self.map { $0.asDriver().asObservable() }.combineLatest(resultSelector)
|
||||
return Driver<R>(source)
|
||||
}
|
||||
}
|
||||
|
|
@ -430,9 +430,9 @@ extension DriverConvertibleType {
|
|||
- parameter resultSelector: Function to invoke for each element from the self combined with the latest element from the second source, if any.
|
||||
- returns: An observable sequence containing the result of combining each element of the self with the latest element from the second source, if any, using the specified result selector function.
|
||||
*/
|
||||
public func withLatestFrom<SecondO: DriverConvertibleType, ResultType>(second: SecondO, resultSelector: (E, SecondO.E) -> ResultType) -> Driver<ResultType> {
|
||||
public func withLatestFrom<SecondO: DriverConvertibleType, ResultType>(_ second: SecondO, resultSelector: (E, SecondO.E) -> ResultType) -> Driver<ResultType> {
|
||||
let source = self.asObservable()
|
||||
.withLatestFrom(second: second.asDriver(), resultSelector: resultSelector)
|
||||
.withLatestFrom(second.asDriver(), resultSelector: resultSelector)
|
||||
|
||||
return Driver<ResultType>(source)
|
||||
}
|
||||
|
|
@ -443,9 +443,9 @@ extension DriverConvertibleType {
|
|||
- parameter second: Second observable source.
|
||||
- returns: An observable sequence containing the result of combining each element of the self with the latest element from the second source, if any, using the specified result selector function.
|
||||
*/
|
||||
public func withLatestFrom<SecondO: DriverConvertibleType>(second: SecondO) -> Driver<SecondO.E> {
|
||||
public func withLatestFrom<SecondO: DriverConvertibleType>(_ second: SecondO) -> Driver<SecondO.E> {
|
||||
let source = self.asObservable()
|
||||
.withLatestFrom(second: second.asDriver())
|
||||
.withLatestFrom(second.asDriver())
|
||||
|
||||
return Driver<SecondO.E>(source)
|
||||
}
|
||||
|
|
@ -462,11 +462,11 @@ extension DriverConvertibleType {
|
|||
- parameter count: The number of elements to skip before returning the remaining elements.
|
||||
- returns: An observable sequence that contains the elements that occur after the specified index in the input sequence.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func skip(count: Int)
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func skip(_ count: Int)
|
||||
-> Driver<E> {
|
||||
let source = self.asObservable()
|
||||
.skip(count: count)
|
||||
.skip(count)
|
||||
return Driver(source)
|
||||
}
|
||||
}
|
||||
|
|
@ -482,12 +482,12 @@ extension DriverConvertibleType {
|
|||
- parameter element: Element to prepend to the specified sequence.
|
||||
- returns: The source sequence prepended with the specified values.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func startWith(element: E)
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func startWith(_ element: E)
|
||||
-> Driver<E> {
|
||||
let source = self.asObservable()
|
||||
.startWith(elements: element)
|
||||
|
||||
return Driver(source)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,9 +21,9 @@ extension DriverConvertibleType {
|
|||
- returns: Disposable object that can be used to unsubscribe the observer from the subject.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.ud")
|
||||
public func drive<O: ObserverType where O.E == E>(observer: O) -> Disposable {
|
||||
public func drive<O: ObserverType where O.E == E>(_ observer: O) -> Disposable {
|
||||
MainScheduler.ensureExecutingOnScheduler()
|
||||
return self.asObservable().subscribe(observer: observer)
|
||||
return self.asObservable().subscribe(observer)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -33,8 +33,8 @@ extension DriverConvertibleType {
|
|||
- returns: Disposable object that can be used to unsubscribe the observer from the variable.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.ud")
|
||||
public func drive(variable: Variable<E>) -> Disposable {
|
||||
return drive(onNext: { e in
|
||||
public func drive(_ variable: Variable<E>) -> Disposable {
|
||||
return drive({ e in
|
||||
variable.value = e
|
||||
})
|
||||
}
|
||||
|
|
@ -46,7 +46,7 @@ extension DriverConvertibleType {
|
|||
- returns: Object representing subscription.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.ud")
|
||||
public func drive<R>(transformation: Observable<E> -> R) -> R {
|
||||
public func drive<R>(_ transformation: (Observable<E>) -> R) -> R {
|
||||
MainScheduler.ensureExecutingOnScheduler()
|
||||
return transformation(self.asObservable())
|
||||
}
|
||||
|
|
@ -64,7 +64,7 @@ extension DriverConvertibleType {
|
|||
- returns: Object representing subscription.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.ud")
|
||||
public func drive<R1, R2>(with: Observable<E> -> R1 -> R2, curriedArgument: R1) -> R2 {
|
||||
public func drive<R1, R2>(_ with: (Observable<E>) -> (R1) -> R2, curriedArgument: R1) -> R2 {
|
||||
MainScheduler.ensureExecutingOnScheduler()
|
||||
return with(self.asObservable())(curriedArgument)
|
||||
}
|
||||
|
|
@ -82,9 +82,9 @@ extension DriverConvertibleType {
|
|||
- returns: Subscription object used to unsubscribe from the observable sequence.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.ud")
|
||||
public func drive(onNext: ((E) -> Void)? = nil, onCompleted: (() -> Void)? = nil, onDisposed: (() -> Void)? = nil) -> Disposable {
|
||||
public func drive(_ onNext: ((E) -> Void)? = nil, onCompleted: (() -> Void)? = nil, onDisposed: (() -> Void)? = nil) -> Disposable {
|
||||
MainScheduler.ensureExecutingOnScheduler()
|
||||
return self.asObservable().subscribe(onNext: onNext, onCompleted: onCompleted, onDisposed: onDisposed)
|
||||
return self.asObservable().subscribe(onNext, onCompleted: onCompleted, onDisposed: onDisposed)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -94,9 +94,9 @@ extension DriverConvertibleType {
|
|||
- returns: Subscription object used to unsubscribe from the observable sequence.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.ud")
|
||||
public func driveNext(onNext: E -> Void) -> Disposable {
|
||||
public func driveNext(_ onNext: (E) -> Void) -> Disposable {
|
||||
MainScheduler.ensureExecutingOnScheduler()
|
||||
return self.asObservable().subscribeNext(onNext: onNext)
|
||||
return self.asObservable().subscribeNext(onNext)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,12 +19,12 @@ public protocol DriverConvertibleType : ObservableConvertibleType {
|
|||
/**
|
||||
Converts self to `Driver`.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
func asDriver() -> Driver<E>
|
||||
}
|
||||
|
||||
extension DriverConvertibleType {
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func asObservable() -> Observable<E> {
|
||||
return asDriver().asObservable()
|
||||
}
|
||||
|
|
@ -75,7 +75,7 @@ public struct Driver<Element> : DriverConvertibleType {
|
|||
/**
|
||||
- returns: Built observable sequence.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func asObservable() -> Observable<E> {
|
||||
return _source
|
||||
}
|
||||
|
|
@ -83,7 +83,7 @@ public struct Driver<Element> : DriverConvertibleType {
|
|||
/**
|
||||
- returns: `self`
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func asDriver() -> Driver<E> {
|
||||
return self
|
||||
}
|
||||
|
|
@ -97,9 +97,9 @@ extension Driver {
|
|||
|
||||
- returns: An observable sequence with no elements.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public static func empty() -> Driver<E> {
|
||||
return Driver(raw: Observable.empty().subscribeOn(scheduler: driverSubscribeOnScheduler))
|
||||
return Driver(Observable.empty().subscribeOn(driverSubscribeOnScheduler))
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -107,9 +107,9 @@ extension Driver {
|
|||
|
||||
- returns: An observable sequence whose observers will never get called.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public static func never() -> Driver<E> {
|
||||
return Driver(raw: Observable.never().subscribeOn(scheduler: driverSubscribeOnScheduler))
|
||||
return Driver(Observable.never().subscribeOn(driverSubscribeOnScheduler))
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -118,9 +118,9 @@ extension Driver {
|
|||
- parameter element: Single element in the resulting observable sequence.
|
||||
- returns: An observable sequence containing the single specified element.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public static func just(element: E) -> Driver<E> {
|
||||
return Driver(raw: Observable.just(element).subscribeOn(scheduler: driverSubscribeOnScheduler))
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public static func just(_ element: E) -> Driver<E> {
|
||||
return Driver(Observable.just(element).subscribeOn(driverSubscribeOnScheduler))
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -129,8 +129,8 @@ extension Driver {
|
|||
- parameter observableFactory: Observable factory function to invoke for each observer that subscribes to the resulting sequence.
|
||||
- returns: An observable sequence whose observers trigger an invocation of the given observable factory function.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public static func deferred(observableFactory: () -> Driver<E>)
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public static func deferred(_ observableFactory: () -> Driver<E>)
|
||||
-> Driver<E> {
|
||||
return Driver(Observable.deferred { observableFactory().asObservable() })
|
||||
}
|
||||
|
|
@ -143,9 +143,9 @@ extension Driver {
|
|||
- parameter elements: Elements to generate.
|
||||
- returns: The observable sequence whose elements are pulled from the given arguments.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public static func of(elements: E ...) -> Driver<E> {
|
||||
let source = elements.toObservable(scheduler: driverSubscribeOnScheduler)
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public static func of(_ elements: E ...) -> Driver<E> {
|
||||
let source = elements.toObservable(driverSubscribeOnScheduler)
|
||||
return Driver(raw: source)
|
||||
}
|
||||
}
|
||||
|
|
@ -159,10 +159,10 @@ extension Driver where Element : SignedInteger {
|
|||
- parameter period: Period for producing the values in the resulting sequence.
|
||||
- returns: An observable sequence that produces a value after each period.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public static func interval(period: RxTimeInterval)
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public static func interval(_ period: RxTimeInterval)
|
||||
-> Driver<E> {
|
||||
return Driver(Observable.interval(period: period, scheduler: driverObserveOnScheduler))
|
||||
return Driver(Observable.interval(period, scheduler: driverObserveOnScheduler))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -178,10 +178,10 @@ extension Driver where Element: SignedInteger {
|
|||
- parameter period: Period to produce subsequent values.
|
||||
- returns: An observable sequence that produces a value after due time has elapsed and then each period.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public static func timer(dueTime: RxTimeInterval, period: RxTimeInterval)
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public static func timer(_ dueTime: RxTimeInterval, period: RxTimeInterval)
|
||||
-> Driver<E> {
|
||||
return Driver(Observable.timer(dueTime: dueTime, period: period, scheduler: driverObserveOnScheduler))
|
||||
return Driver(Observable.timer(dueTime, period: period, scheduler: driverObserveOnScheduler))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -191,7 +191,7 @@ extension Driver where Element: SignedInteger {
|
|||
|
||||
**This shouldn't be used in normal release builds.**
|
||||
*/
|
||||
public func driveOnScheduler(scheduler: SchedulerType, action: () -> ()) {
|
||||
public func driveOnScheduler(_ scheduler: SchedulerType, action: () -> ()) {
|
||||
let originalObserveOnScheduler = driverObserveOnScheduler
|
||||
let originalSubscribeOnScheduler = driverSubscribeOnScheduler
|
||||
|
||||
|
|
@ -201,17 +201,17 @@ public func driveOnScheduler(scheduler: SchedulerType, action: () -> ()) {
|
|||
action()
|
||||
|
||||
// If you remove this line , compiler buggy optimizations will change behavior of this code
|
||||
_forceCompilerToStopDoingInsaneOptimizationsThatBreakCode(scheduler: driverObserveOnScheduler)
|
||||
_forceCompilerToStopDoingInsaneOptimizationsThatBreakCode(scheduler: driverSubscribeOnScheduler)
|
||||
_forceCompilerToStopDoingInsaneOptimizationsThatBreakCode(driverObserveOnScheduler)
|
||||
_forceCompilerToStopDoingInsaneOptimizationsThatBreakCode(driverSubscribeOnScheduler)
|
||||
// Scary, I know
|
||||
|
||||
driverObserveOnScheduler = originalObserveOnScheduler
|
||||
driverSubscribeOnScheduler = originalSubscribeOnScheduler
|
||||
}
|
||||
|
||||
func _forceCompilerToStopDoingInsaneOptimizationsThatBreakCode(scheduler: SchedulerType) {
|
||||
func _forceCompilerToStopDoingInsaneOptimizationsThatBreakCode(_ scheduler: SchedulerType) {
|
||||
let a: Int32 = 1
|
||||
let b = 314 + Int32(rand() & 1)
|
||||
let b = 314 + Int32(arc4random() & 1)
|
||||
if a == b {
|
||||
print(scheduler)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,12 +18,12 @@ extension ObservableConvertibleType {
|
|||
- parameter onErrorJustReturn: Element to return in case of error and after that complete the sequence.
|
||||
- returns: Driving observable sequence.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func asDriver(onErrorJustReturn: E) -> Driver<E> {
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func asDriver(_ onErrorJustReturn: E) -> Driver<E> {
|
||||
let source = self
|
||||
.asObservable()
|
||||
.observeOn(scheduler: driverObserveOnScheduler)
|
||||
.catchErrorJustReturn(element: onErrorJustReturn)
|
||||
.observeOn(driverObserveOnScheduler)
|
||||
.catchErrorJustReturn(onErrorJustReturn)
|
||||
return Driver(source)
|
||||
}
|
||||
|
||||
|
|
@ -33,11 +33,11 @@ extension ObservableConvertibleType {
|
|||
- parameter onErrorDriveWith: Driver that continues to drive the sequence in case of error.
|
||||
- returns: Driving observable sequence.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func asDriver(onErrorDriveWith: Driver<E>) -> Driver<E> {
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func asDriver(_ onErrorDriveWith: Driver<E>) -> Driver<E> {
|
||||
let source = self
|
||||
.asObservable()
|
||||
.observeOn(scheduler: driverObserveOnScheduler)
|
||||
.observeOn(driverObserveOnScheduler)
|
||||
.catchError { _ in
|
||||
onErrorDriveWith.asObservable()
|
||||
}
|
||||
|
|
@ -50,14 +50,14 @@ extension ObservableConvertibleType {
|
|||
- parameter onErrorRecover: Calculates driver that continues to drive the sequence in case of error.
|
||||
- returns: Driving observable sequence.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func asDriver(onErrorRecover: (error: ErrorProtocol) -> Driver<E>) -> Driver<E> {
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func asDriver(_ onErrorRecover: (error: ErrorProtocol) -> Driver<E>) -> Driver<E> {
|
||||
let source = self
|
||||
.asObservable()
|
||||
.observeOn(scheduler: driverObserveOnScheduler)
|
||||
.observeOn(driverObserveOnScheduler)
|
||||
.catchError { error in
|
||||
onErrorRecover(error: error).asObservable()
|
||||
}
|
||||
return Driver(source)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,10 +17,10 @@ extension Variable {
|
|||
|
||||
- returns: Driving observable sequence.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func asDriver() -> Driver<E> {
|
||||
let source = self.asObservable()
|
||||
.observeOn(scheduler: driverObserveOnScheduler)
|
||||
.observeOn(driverObserveOnScheduler)
|
||||
return Driver(source)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,17 +36,17 @@ public class UIBindingObserver<UIElementType, Value where UIElementType: AnyObje
|
|||
/**
|
||||
Binds next element to owner view as described in `binding`.
|
||||
*/
|
||||
public func on(event: Event<Value>) {
|
||||
public func on(_ event: Event<Value>) {
|
||||
MainScheduler.ensureExecutingOnScheduler()
|
||||
|
||||
switch event {
|
||||
case .Next(let element):
|
||||
case .next(let element):
|
||||
if let view = self.UIElement {
|
||||
binding(view, element)
|
||||
}
|
||||
case .Error(let error):
|
||||
case .error(let error):
|
||||
bindingErrorToInterface(error)
|
||||
case .Completed:
|
||||
case .completed:
|
||||
break
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -85,12 +85,12 @@ public class DelegateProxy : _RXDelegateProxy {
|
|||
- parameter selector: Selector used to filter observed invocations of delegate methods.
|
||||
- returns: Observable sequence of arguments passed to `selector` method.
|
||||
*/
|
||||
public func observe(selector: Selector) -> Observable<[AnyObject]> {
|
||||
if hasWiredImplementationForSelector(selector) {
|
||||
public func observe(_ selector: Selector) -> Observable<[AnyObject]> {
|
||||
if hasWiredImplementation(for: selector) {
|
||||
print("Delegate proxy is already implementing `\(selector)`, a more performant way of registering might exist.")
|
||||
}
|
||||
|
||||
if !self.respondsToSelector(selector) {
|
||||
if !self.responds(to: selector) {
|
||||
rxFatalError("This class doesn't respond to selector \(selector)")
|
||||
}
|
||||
|
||||
|
|
@ -109,7 +109,7 @@ public class DelegateProxy : _RXDelegateProxy {
|
|||
// proxy
|
||||
|
||||
public override func interceptedSelector(_ selector: Selector, withArguments arguments: [AnyObject]!) {
|
||||
subjectsForSelector[selector]?.on(.Next(arguments))
|
||||
subjectsForSelector[selector]?.on(.next(arguments))
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -126,7 +126,7 @@ public class DelegateProxy : _RXDelegateProxy {
|
|||
|
||||
- returns: Initialized instance of `self`.
|
||||
*/
|
||||
public class func createProxyForObject(object: AnyObject) -> AnyObject {
|
||||
public class func createProxyForObject(_ object: AnyObject) -> AnyObject {
|
||||
return self.init(parentObject: object)
|
||||
}
|
||||
|
||||
|
|
@ -136,7 +136,7 @@ public class DelegateProxy : _RXDelegateProxy {
|
|||
- parameter object: Object that can have assigned delegate proxy.
|
||||
- returns: Assigned delegate proxy or `nil` if no delegate proxy is assigned.
|
||||
*/
|
||||
public class func assignedProxyFor(object: AnyObject) -> AnyObject? {
|
||||
public class func assignedProxyFor(_ object: AnyObject) -> AnyObject? {
|
||||
let maybeDelegate: AnyObject? = objc_getAssociatedObject(object, self.delegateAssociatedObjectTag())
|
||||
return castOptionalOrFatalError(maybeDelegate)
|
||||
}
|
||||
|
|
@ -147,8 +147,8 @@ public class DelegateProxy : _RXDelegateProxy {
|
|||
- parameter object: Object that can have assigned delegate proxy.
|
||||
- parameter proxy: Delegate proxy object to assign to `object`.
|
||||
*/
|
||||
public class func assignProxy(proxy: AnyObject, toObject object: AnyObject) {
|
||||
precondition(proxy.isKindOfClass(self.classForCoder()))
|
||||
public class func assignProxy(_ proxy: AnyObject, toObject object: AnyObject) {
|
||||
precondition(proxy.isKind(of: self.classForCoder()))
|
||||
|
||||
objc_setAssociatedObject(object, self.delegateAssociatedObjectTag(), proxy, .OBJC_ASSOCIATION_RETAIN)
|
||||
}
|
||||
|
|
@ -160,8 +160,8 @@ public class DelegateProxy : _RXDelegateProxy {
|
|||
- parameter forwardToDelegate: Reference of delegate that receives all messages through `self`.
|
||||
- parameter retainDelegate: Should `self` retain `forwardToDelegate`.
|
||||
*/
|
||||
public func setForwardToDelegate(forwardToDelegate delegate: AnyObject?, retainDelegate: Bool) {
|
||||
self._setForwardToDelegate(delegate, retainDelegate: retainDelegate)
|
||||
public func setForwardToDelegate(_ delegate: AnyObject?, retainDelegate: Bool) {
|
||||
self._setForward(toDelegate: delegate, retainDelegate: retainDelegate)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -176,7 +176,7 @@ public class DelegateProxy : _RXDelegateProxy {
|
|||
|
||||
deinit {
|
||||
for v in subjectsForSelector.values {
|
||||
v.on(.Completed)
|
||||
v.on(.completed)
|
||||
}
|
||||
#if TRACE_RESOURCES
|
||||
OSAtomicDecrement32(&resourceCount)
|
||||
|
|
@ -185,7 +185,7 @@ public class DelegateProxy : _RXDelegateProxy {
|
|||
|
||||
// MARK: Pointer
|
||||
|
||||
class func _pointer(p: UnsafePointer<Void>) -> UnsafePointer<Void> {
|
||||
class func _pointer(_ p: UnsafePointer<Void>) -> UnsafePointer<Void> {
|
||||
return p
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ public protocol DelegateProxyType : AnyObject {
|
|||
/**
|
||||
Creates new proxy for target object.
|
||||
*/
|
||||
static func createProxyForObject(object: AnyObject) -> AnyObject
|
||||
static func createProxyForObject(_ object: AnyObject) -> AnyObject
|
||||
|
||||
/**
|
||||
Returns assigned proxy for object.
|
||||
|
|
@ -95,7 +95,7 @@ public protocol DelegateProxyType : AnyObject {
|
|||
- parameter object: Object that can have assigned delegate proxy.
|
||||
- returns: Assigned delegate proxy or `nil` if no delegate proxy is assigned.
|
||||
*/
|
||||
static func assignedProxyFor(object: AnyObject) -> AnyObject?
|
||||
static func assignedProxyFor(_ object: AnyObject) -> AnyObject?
|
||||
|
||||
/**
|
||||
Assigns proxy to object.
|
||||
|
|
@ -103,7 +103,7 @@ public protocol DelegateProxyType : AnyObject {
|
|||
- parameter object: Object that can have assigned delegate proxy.
|
||||
- parameter proxy: Delegate proxy object to assign to `object`.
|
||||
*/
|
||||
static func assignProxy(proxy: AnyObject, toObject object: AnyObject)
|
||||
static func assignProxy(_ proxy: AnyObject, toObject object: AnyObject)
|
||||
|
||||
/**
|
||||
Returns designated delegate property for object.
|
||||
|
|
@ -115,7 +115,7 @@ public protocol DelegateProxyType : AnyObject {
|
|||
- parameter object: Object that has delegate property.
|
||||
- returns: Value of delegate property.
|
||||
*/
|
||||
static func currentDelegateFor(object: AnyObject) -> AnyObject?
|
||||
static func currentDelegateFor(_ object: AnyObject) -> AnyObject?
|
||||
|
||||
/**
|
||||
Sets designated delegate property for object.
|
||||
|
|
@ -127,7 +127,7 @@ public protocol DelegateProxyType : AnyObject {
|
|||
- parameter toObject: Object that has delegate property.
|
||||
- parameter delegate: Delegate value.
|
||||
*/
|
||||
static func setCurrentDelegate(delegate: AnyObject?, toObject object: AnyObject)
|
||||
static func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject)
|
||||
|
||||
/**
|
||||
Returns reference of normal delegate that receives all forwarded messages
|
||||
|
|
@ -144,11 +144,11 @@ public protocol DelegateProxyType : AnyObject {
|
|||
- parameter forwardToDelegate: Reference of delegate that receives all messages through `self`.
|
||||
- parameter retainDelegate: Should `self` retain `forwardToDelegate`.
|
||||
*/
|
||||
func setForwardToDelegate(forwardToDelegate: AnyObject?, retainDelegate: Bool)
|
||||
func setForwardToDelegate(_ forwardToDelegate: AnyObject?, retainDelegate: Bool)
|
||||
}
|
||||
|
||||
@available(*, deprecated=2.5, renamed="DelegateProxyType.proxyForObject", message="You can just use normal static protocol extension. E.g. `RxScrollViewDelegateProxy.proxyForObject`")
|
||||
public func proxyForObject<P: DelegateProxyType>(type: P.Type, _ object: AnyObject) -> P {
|
||||
@available(*, deprecated:2.5, renamed:"DelegateProxyType.proxyForObject", message:"You can just use normal static protocol extension. E.g. `RxScrollViewDelegateProxy.proxyForObject`")
|
||||
public func proxyForObject<P: DelegateProxyType>(_ type: P.Type, _ object: AnyObject) -> P {
|
||||
return P.proxyForObject(object)
|
||||
}
|
||||
|
||||
|
|
@ -172,7 +172,7 @@ extension DelegateProxyType {
|
|||
}
|
||||
}
|
||||
*/
|
||||
public static func proxyForObject(object: AnyObject) -> Self {
|
||||
public static func proxyForObject(_ object: AnyObject) -> Self {
|
||||
MainScheduler.ensureExecutingOnScheduler()
|
||||
|
||||
let maybeProxy = Self.assignedProxyFor(object) as? Self
|
||||
|
|
@ -208,7 +208,7 @@ extension DelegateProxyType {
|
|||
- parameter onProxyForObject: Object that has `delegate` property.
|
||||
- returns: Disposable object that can be used to clear forward delegate.
|
||||
*/
|
||||
public static func installForwardDelegate(forwardDelegate: AnyObject, retainDelegate: Bool, onProxyForObject object: AnyObject) -> Disposable {
|
||||
public static func installForwardDelegate(_ forwardDelegate: AnyObject, retainDelegate: Bool, onProxyForObject object: AnyObject) -> Disposable {
|
||||
weak var weakForwardDelegate: AnyObject? = forwardDelegate
|
||||
|
||||
let proxy = Self.proxyForObject(object)
|
||||
|
|
@ -241,7 +241,7 @@ extension DelegateProxyType {
|
|||
}
|
||||
|
||||
extension ObservableType {
|
||||
func subscribeProxyDataSourceForObject<P: DelegateProxyType>(object: AnyObject, dataSource: AnyObject, retainDataSource: Bool, binding: (P, Event<E>) -> Void)
|
||||
func subscribeProxyDataSourceForObject<P: DelegateProxyType>(_ object: AnyObject, dataSource: AnyObject, retainDataSource: Bool, binding: (P, Event<E>) -> Void)
|
||||
-> Disposable {
|
||||
let proxy = P.proxyForObject(object)
|
||||
let disposable = P.installForwardDelegate(dataSource, retainDelegate: retainDataSource, onProxyForObject: object)
|
||||
|
|
@ -259,10 +259,10 @@ extension ObservableType {
|
|||
binding(proxy, event)
|
||||
|
||||
switch event {
|
||||
case .Error(let error):
|
||||
case .error(let error):
|
||||
bindingErrorToInterface(error)
|
||||
disposable.dispose()
|
||||
case .Completed:
|
||||
case .completed:
|
||||
disposable.dispose()
|
||||
default:
|
||||
break
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ extension Int : KVORepresentable {
|
|||
Constructs `Self` using KVO value.
|
||||
*/
|
||||
public init?(KVOValue: KVOType) {
|
||||
self.init(KVOValue.intValue)
|
||||
self.init(KVOValue.int32Value)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -26,7 +26,7 @@ extension Int32 : KVORepresentable {
|
|||
Constructs `Self` using KVO value.
|
||||
*/
|
||||
public init?(KVOValue: KVOType) {
|
||||
self.init(KVOValue.intValue)
|
||||
self.init(KVOValue.int32Value)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -90,4 +90,4 @@ extension RawRepresentable where RawValue: KVORepresentable {
|
|||
|
||||
self.init(rawValue: rawValue)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ import Foundation
|
|||
Simple logging settings for RxCocoa library.
|
||||
*/
|
||||
public struct Logging {
|
||||
public typealias LogURLRequest = (NSURLRequest) -> Bool
|
||||
public typealias LogURLRequest = (URLRequest) -> Bool
|
||||
|
||||
/**
|
||||
Log URL requests to standard output in curl format.
|
||||
|
|
@ -24,4 +24,4 @@ public struct Logging {
|
|||
return false
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ extension NSLayoutConstraint {
|
|||
@available(iOS 8, OSX 10.10, *)
|
||||
public var rx_active: AnyObserver<Bool> {
|
||||
return UIBindingObserver(UIElement: self) { constraint, value in
|
||||
constraint.active = value
|
||||
constraint.isActive = value
|
||||
}.asObserver()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,8 +23,8 @@ extension ObservableType {
|
|||
- returns: Disposable object that can be used to unsubscribe the observer.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.ud")
|
||||
public func bindTo<O: ObserverType where O.E == E>(observer: O) -> Disposable {
|
||||
return self.subscribe(observer: observer)
|
||||
public func bindTo<O: ObserverType where O.E == E>(_ observer: O) -> Disposable {
|
||||
return self.subscribe(observer)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -37,19 +37,19 @@ extension ObservableType {
|
|||
- returns: Disposable object that can be used to unsubscribe the observer.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.ud")
|
||||
public func bindTo(variable: Variable<E>) -> Disposable {
|
||||
public func bindTo(_ variable: Variable<E>) -> Disposable {
|
||||
return subscribe { e in
|
||||
switch e {
|
||||
case let .Next(element):
|
||||
case let .next(element):
|
||||
variable.value = element
|
||||
case let .Error(error):
|
||||
case let .error(error):
|
||||
let error = "Binding error to variable: \(error)"
|
||||
#if DEBUG
|
||||
rxFatalError(error)
|
||||
#else
|
||||
print(error)
|
||||
#endif
|
||||
case .Completed:
|
||||
case .completed:
|
||||
break
|
||||
}
|
||||
}
|
||||
|
|
@ -62,7 +62,7 @@ extension ObservableType {
|
|||
- returns: Object representing subscription.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.ud")
|
||||
public func bindTo<R>(binder: Self -> R) -> R {
|
||||
public func bindTo<R>(_ binder: (Self) -> R) -> R {
|
||||
return binder(self)
|
||||
}
|
||||
|
||||
|
|
@ -79,7 +79,7 @@ extension ObservableType {
|
|||
- returns: Object representing subscription.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.ud")
|
||||
public func bindTo<R1, R2>(binder: Self -> R1 -> R2, curriedArgument: R1) -> R2 {
|
||||
public func bindTo<R1, R2>(_ binder: (Self) -> (R1) -> R2, curriedArgument: R1) -> R2 {
|
||||
return binder(self)(curriedArgument)
|
||||
}
|
||||
|
||||
|
|
@ -94,8 +94,8 @@ extension ObservableType {
|
|||
- returns: Subscription object used to unsubscribe from the observable sequence.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.ud")
|
||||
public func bindNext(onNext: E -> Void) -> Disposable {
|
||||
return subscribe(onNext: onNext, onError: { error in
|
||||
public func bindNext(_ onNext: (E) -> Void) -> Disposable {
|
||||
return subscribe(onNext, onError: { error in
|
||||
let error = "Binding error: \(error)"
|
||||
#if DEBUG
|
||||
rxFatalError(error)
|
||||
|
|
|
|||
|
|
@ -45,9 +45,9 @@ class ControlTarget: RxTarget {
|
|||
|
||||
super.init()
|
||||
|
||||
control.addTarget(self, action: selector, forControlEvents: controlEvents)
|
||||
control.addTarget(self, action: selector, for: controlEvents)
|
||||
|
||||
let method = self.methodForSelector(selector)
|
||||
let method = self.method(for: selector)
|
||||
if method == nil {
|
||||
rxFatalError("Can't find method")
|
||||
}
|
||||
|
|
@ -71,7 +71,7 @@ class ControlTarget: RxTarget {
|
|||
}
|
||||
#endif
|
||||
|
||||
func eventHandler(sender: Control!) {
|
||||
func eventHandler(_ sender: Control!) {
|
||||
if let callback = self.callback, control = self.control {
|
||||
callback(control)
|
||||
}
|
||||
|
|
@ -80,7 +80,7 @@ class ControlTarget: RxTarget {
|
|||
override func dispose() {
|
||||
super.dispose()
|
||||
#if os(iOS) || os(tvOS)
|
||||
self.control?.removeTarget(self, action: self.selector, forControlEvents: self.controlEvents)
|
||||
self.control?.removeTarget(self, action: self.selector, for: self.controlEvents)
|
||||
#elseif os(OSX)
|
||||
self.control?.target = nil
|
||||
self.control?.action = nil
|
||||
|
|
|
|||
|
|
@ -12,13 +12,13 @@ import RxSwift
|
|||
#endif
|
||||
|
||||
class DeallocObservable {
|
||||
let _subject = ReplaySubject<Void>.create(bufferSize: 1)
|
||||
let _subject = ReplaySubject<Void>.create(1)
|
||||
|
||||
init() {
|
||||
}
|
||||
|
||||
deinit {
|
||||
_subject.on(event: .Next(()))
|
||||
_subject.on(event: .Completed)
|
||||
_subject.on(.next(()))
|
||||
_subject.on(.completed)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,13 +33,13 @@ class KVOObservable<Element>
|
|||
}
|
||||
}
|
||||
|
||||
func subscribe<O : ObserverType where O.E == Element?>(observer: O) -> Disposable {
|
||||
func subscribe<O : ObserverType where O.E == Element?>(_ observer: O) -> Disposable {
|
||||
let observer = KVOObserver(parent: self) { (value) in
|
||||
if value as? NSNull != nil {
|
||||
observer.on(event: .Next(nil))
|
||||
observer.on(.next(nil))
|
||||
return
|
||||
}
|
||||
observer.on(event: .Next(value as? Element))
|
||||
observer.on(.next(value as? Element))
|
||||
}
|
||||
|
||||
return AnonymousDisposable(observer.dispose)
|
||||
|
|
@ -49,18 +49,18 @@ class KVOObservable<Element>
|
|||
|
||||
#if !DISABLE_SWIZZLING
|
||||
|
||||
func observeWeaklyKeyPathFor(target: NSObject, keyPath: String, options: NSKeyValueObservingOptions) -> Observable<AnyObject?> {
|
||||
func observeWeaklyKeyPathFor(_ target: NSObject, keyPath: String, options: NSKeyValueObservingOptions) -> Observable<AnyObject?> {
|
||||
let components = keyPath.components(separatedBy: ".").filter { $0 != "self" }
|
||||
|
||||
let observable = observeWeaklyKeyPathFor(target: target, keyPathSections: components, options: options)
|
||||
.finishWithNilWhenDealloc(target: target)
|
||||
let observable = observeWeaklyKeyPathFor(target, keyPathSections: components, options: options)
|
||||
.finishWithNilWhenDealloc(target)
|
||||
|
||||
if !options.intersect(.initial).isEmpty {
|
||||
if !options.intersection(.initial).isEmpty {
|
||||
return observable
|
||||
}
|
||||
else {
|
||||
return observable
|
||||
.skip(count: 1)
|
||||
.skip(1)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -68,12 +68,12 @@ func observeWeaklyKeyPathFor(target: NSObject, keyPath: String, options: NSKeyVa
|
|||
// Identifiers can't contain `,`, so the only place where `,` can appear
|
||||
// is as a delimiter.
|
||||
// This means there is `W` as element in an array of property attributes.
|
||||
func isWeakProperty(properyRuntimeInfo: String) -> Bool {
|
||||
func isWeakProperty(_ properyRuntimeInfo: String) -> Bool {
|
||||
return properyRuntimeInfo.range(of: ",W,") != nil
|
||||
}
|
||||
|
||||
extension ObservableType where E == AnyObject? {
|
||||
func finishWithNilWhenDealloc(target: NSObject)
|
||||
func finishWithNilWhenDealloc(_ target: NSObject)
|
||||
-> Observable<AnyObject?> {
|
||||
let deallocating = target.rx_deallocating
|
||||
|
||||
|
|
@ -87,7 +87,7 @@ extension ObservableType where E == AnyObject? {
|
|||
}
|
||||
|
||||
func observeWeaklyKeyPathFor(
|
||||
target: NSObject,
|
||||
_ target: NSObject,
|
||||
keyPathSections: [String],
|
||||
options: NSKeyValueObservingOptions
|
||||
) -> Observable<AnyObject?> {
|
||||
|
|
@ -99,12 +99,12 @@ func observeWeaklyKeyPathFor(
|
|||
|
||||
let property = class_getProperty(object_getClass(target), propertyName)
|
||||
if property == nil {
|
||||
return Observable.error(RxCocoaError.InvalidPropertyName(object: target, propertyName: propertyName))
|
||||
return Observable.error(RxCocoaError.invalidPropertyName(object: target, propertyName: propertyName))
|
||||
}
|
||||
let propertyAttributes = property_getAttributes(property)
|
||||
|
||||
// should dealloc hook be in place if week property, or just create strong reference because it doesn't matter
|
||||
let isWeak = isWeakProperty(properyRuntimeInfo: String(propertyAttributes) ?? "")
|
||||
let isWeak = isWeakProperty(String(propertyAttributes) ?? "")
|
||||
let propertyObservable = KVOObservable(object: target, keyPath: propertyName, options: options.union(.initial), retainTarget: false) as KVOObservable<AnyObject>
|
||||
|
||||
// KVO recursion for value changes
|
||||
|
|
@ -118,7 +118,7 @@ func observeWeaklyKeyPathFor(
|
|||
let strongTarget: AnyObject? = weakTarget
|
||||
|
||||
if nextObject == nil {
|
||||
return Observable.error(RxCocoaError.InvalidObjectOnKeyPath(object: nextTarget!, sourceObject: strongTarget ?? NSNull(), propertyName: propertyName))
|
||||
return Observable.error(RxCocoaError.invalidObjectOnKeyPath(object: nextTarget!, sourceObject: strongTarget ?? NSNull(), propertyName: propertyName))
|
||||
}
|
||||
|
||||
// if target is alive, then send change
|
||||
|
|
@ -129,11 +129,11 @@ func observeWeaklyKeyPathFor(
|
|||
|
||||
let nextElementsObservable = keyPathSections.count == 1
|
||||
? Observable.just(nextTarget)
|
||||
: observeWeaklyKeyPathFor(target: nextObject!, keyPathSections: remainingPaths, options: options)
|
||||
: observeWeaklyKeyPathFor(nextObject!, keyPathSections: remainingPaths, options: options)
|
||||
|
||||
if isWeak {
|
||||
return nextElementsObservable
|
||||
.finishWithNilWhenDealloc(target: nextObject!)
|
||||
.finishWithNilWhenDealloc(nextObject!)
|
||||
}
|
||||
else {
|
||||
return nextElementsObservable
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ import Foundation
|
|||
, RXMessageSentObserver {
|
||||
typealias E = ()
|
||||
|
||||
private let _subject = ReplaySubject<()>.create(bufferSize: 1)
|
||||
private let _subject = ReplaySubject<()>.create(1)
|
||||
|
||||
@objc var targetImplementation: IMP = RX_default_target_implementation()
|
||||
|
||||
|
|
@ -29,8 +29,8 @@ import Foundation
|
|||
init() {
|
||||
}
|
||||
|
||||
@objc func messageSentWithParameters(_ parameters: [AnyObject]) -> Void {
|
||||
_subject.on(event: .Next())
|
||||
@objc func messageSent(withParameters parameters: [AnyObject]) -> Void {
|
||||
_subject.on(.next())
|
||||
}
|
||||
|
||||
func asObservable() -> Observable<()> {
|
||||
|
|
@ -38,7 +38,7 @@ import Foundation
|
|||
}
|
||||
|
||||
deinit {
|
||||
_subject.on(event: .Completed)
|
||||
_subject.on(.completed)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -58,8 +58,8 @@ import Foundation
|
|||
init() {
|
||||
}
|
||||
|
||||
@objc func messageSentWithParameters(_ parameters: [AnyObject]) -> Void {
|
||||
_subject.on(event: .Next(parameters))
|
||||
@objc func messageSent(withParameters parameters: [AnyObject]) -> Void {
|
||||
_subject.on(.next(parameters))
|
||||
}
|
||||
|
||||
func asObservable() -> Observable<[AnyObject]> {
|
||||
|
|
@ -67,7 +67,7 @@ import Foundation
|
|||
}
|
||||
|
||||
deinit {
|
||||
_subject.on(event: .Completed)
|
||||
_subject.on(.completed)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import Foundation
|
|||
import RxSwift
|
||||
#endif
|
||||
|
||||
extension NSNotificationCenter {
|
||||
extension NotificationCenter {
|
||||
/**
|
||||
Transforms notifications posted to notification center to observable sequence of notifications.
|
||||
|
||||
|
|
@ -19,11 +19,11 @@ extension NSNotificationCenter {
|
|||
- parameter object: Optional object used to filter notifications.
|
||||
- returns: Observable sequence of posted notifications.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func rx_notification(name: String?, object: AnyObject? = nil) -> Observable<NSNotification> {
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func rx_notification(_ name: Notification.Name, object: AnyObject? = nil) -> Observable<Notification> {
|
||||
return Observable.create { [weak object] observer in
|
||||
let nsObserver = self.addObserverForName(name, object: object, queue: nil) { notification in
|
||||
observer.on(.Next(notification))
|
||||
let nsObserver = self.addObserver(forName: name, object: object, queue: nil) { notification in
|
||||
observer.on(.next(notification))
|
||||
}
|
||||
|
||||
return AnonymousDisposable {
|
||||
|
|
@ -31,4 +31,4 @@ extension NSNotificationCenter {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,8 +21,8 @@ extension NSObject {
|
|||
|
||||
For more information take a look at `rx_observe` method.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func rx_observe<E: KVORepresentable>(type: E.Type, _ keyPath: String, options: NSKeyValueObservingOptions = [.New, .Initial], retainSelf: Bool = true) -> Observable<E?> {
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func rx_observe<E: KVORepresentable>(_ type: E.Type, _ keyPath: String, options: NSKeyValueObservingOptions = [.new, .initial], retainSelf: Bool = true) -> Observable<E?> {
|
||||
return rx_observe(E.KVOType.self, keyPath, options: options, retainSelf: retainSelf)
|
||||
.map(E.init)
|
||||
}
|
||||
|
|
@ -36,8 +36,8 @@ extension NSObject {
|
|||
|
||||
For more information take a look at `rx_observeWeakly` method.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func rx_observeWeakly<E: KVORepresentable>(type: E.Type, _ keyPath: String, options: NSKeyValueObservingOptions = [.New, .Initial]) -> Observable<E?> {
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func rx_observeWeakly<E: KVORepresentable>(_ type: E.Type, _ keyPath: String, options: NSKeyValueObservingOptions = [.new, .initial]) -> Observable<E?> {
|
||||
return rx_observeWeakly(E.KVOType.self, keyPath, options: options)
|
||||
.map(E.init)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,10 +21,10 @@ extension NSObject {
|
|||
|
||||
For more information take a look at `rx_observe` method.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func rx_observe<E: RawRepresentable where E.RawValue: KVORepresentable>(type: E.Type, _ keyPath: String, options: NSKeyValueObservingOptions = [.new, .initial], retainSelf: Bool = true) -> Observable<E?> {
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func rx_observe<E: RawRepresentable where E.RawValue: KVORepresentable>(_ type: E.Type, _ keyPath: String, options: NSKeyValueObservingOptions = [.new, .initial], retainSelf: Bool = true) -> Observable<E?> {
|
||||
return rx_observe(E.RawValue.KVOType.self, keyPath, options: options, retainSelf: retainSelf)
|
||||
.map(selector: E.init)
|
||||
.map(E.init)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -42,10 +42,10 @@ extension NSObject {
|
|||
|
||||
For more information take a look at `rx_observeWeakly` method.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func rx_observeWeakly<E: RawRepresentable where E.RawValue: KVORepresentable>(type: E.Type, _ keyPath: String, options: NSKeyValueObservingOptions = [.new, .initial]) -> Observable<E?> {
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func rx_observeWeakly<E: RawRepresentable where E.RawValue: KVORepresentable>(_ type: E.Type, _ keyPath: String, options: NSKeyValueObservingOptions = [.new, .initial]) -> Observable<E?> {
|
||||
return rx_observeWeakly(E.RawValue.KVOType.self, keyPath, options: options)
|
||||
.map(selector: E.init)
|
||||
.map(E.init)
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ extension NSObject {
|
|||
- parameter retainSelf: Retains self during observation if set `true`.
|
||||
- returns: Observable sequence of objects on `keyPath`.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func rx_observe<E>(_ type: E.Type, _ keyPath: String, options: NSKeyValueObservingOptions = [.new, .initial], retainSelf: Bool = true) -> Observable<E?> {
|
||||
return KVOObservable(object: self, keyPath: keyPath, options: options, retainTarget: retainSelf).asObservable()
|
||||
}
|
||||
|
|
@ -81,9 +81,9 @@ extension NSObject {
|
|||
- parameter options: KVO mechanism notification options.
|
||||
- returns: Observable sequence of objects on `keyPath`.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func rx_observeWeakly<E>(_ type: E.Type, _ keyPath: String, options: NSKeyValueObservingOptions = [.new, .initial]) -> Observable<E?> {
|
||||
return observeWeaklyKeyPathFor(target: self, keyPath: keyPath, options: options)
|
||||
return observeWeaklyKeyPathFor(self, keyPath: keyPath, options: options)
|
||||
.map { n in
|
||||
return n as? E
|
||||
}
|
||||
|
|
@ -125,7 +125,7 @@ extension NSObject {
|
|||
|
||||
- returns: Observable sequence of object deallocating events.
|
||||
*/
|
||||
public func rx_sentMessage(selector: Selector) -> Observable<[AnyObject]> {
|
||||
public func rx_sentMessage(_ selector: Selector) -> Observable<[AnyObject]> {
|
||||
return rx_synchronized {
|
||||
// in case of dealloc selector replay subject behavior needs to be used
|
||||
if selector == deallocSelector {
|
||||
|
|
@ -197,7 +197,7 @@ extension NSObject {
|
|||
var error: NSError?
|
||||
let targetImplementation = RX_ensure_observing(self, deallocSelector, &error)
|
||||
if targetImplementation == nil {
|
||||
return Observable.error(error?.rxCocoaErrorForTarget(self) ?? RxCocoaError.Unknown)
|
||||
return Observable.error(error?.rxCocoaErrorForTarget(self) ?? RxCocoaError.unknown)
|
||||
}
|
||||
|
||||
subject.targetImplementation = targetImplementation!
|
||||
|
|
@ -212,7 +212,7 @@ let rxDeallocatingSelector = RX_selector(deallocSelector)
|
|||
let rxDeallocatingSelectorReference = RX_reference_from_selector(rxDeallocatingSelector)
|
||||
|
||||
extension NSObject {
|
||||
func rx_synchronized<T>(@noescape action: () -> T) -> T {
|
||||
func rx_synchronized<T>( _ action: @noescape() -> T) -> T {
|
||||
objc_sync_enter(self)
|
||||
let result = action()
|
||||
objc_sync_exit(self)
|
||||
|
|
@ -225,15 +225,15 @@ extension NSObject {
|
|||
Helper to make sure that `Observable` returned from `createCachedObservable` is only created once.
|
||||
This is important because there is only one `target` and `action` properties on `NSControl` or `UIBarButtonItem`.
|
||||
*/
|
||||
func rx_lazyInstanceObservable<T: AnyObject>(key: UnsafePointer<Void>, createCachedObservable: () -> T) -> T {
|
||||
func rx_lazyInstanceObservable<T: AnyObject>(_ key: UnsafePointer<Void>, createCachedObservable: () -> T) -> T {
|
||||
if let value = objc_getAssociatedObject(self, key) {
|
||||
return value as! T
|
||||
}
|
||||
|
||||
let observable = createCachedObservable()
|
||||
|
||||
objc_setAssociatedObject(self, key, observable, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
|
||||
objc_setAssociatedObject(self, key, observable, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
|
||||
|
||||
return observable
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,19 +20,19 @@ public enum RxCocoaURLError
|
|||
/**
|
||||
Unknown error occurred.
|
||||
*/
|
||||
case Unknown
|
||||
case unknown
|
||||
/**
|
||||
Response is not NSHTTPURLResponse
|
||||
*/
|
||||
case NonHTTPResponse(response: NSURLResponse)
|
||||
case nonHTTPResponse(response: URLResponse)
|
||||
/**
|
||||
Response is not successful. (not in `200 ..< 300` range)
|
||||
*/
|
||||
case HTTPRequestFailed(response: NSHTTPURLResponse, data: NSData?)
|
||||
case httpRequestFailed(response: HTTPURLResponse, data: Data?)
|
||||
/**
|
||||
Deserialization error.
|
||||
*/
|
||||
case DeserializationError(error: ErrorProtocol)
|
||||
case deserializationError(error: ErrorProtocol)
|
||||
}
|
||||
|
||||
public extension RxCocoaURLError {
|
||||
|
|
@ -41,28 +41,28 @@ public extension RxCocoaURLError {
|
|||
*/
|
||||
public var debugDescription: String {
|
||||
switch self {
|
||||
case .Unknown:
|
||||
case .unknown:
|
||||
return "Unknown error has occurred."
|
||||
case let .NonHTTPResponse(response):
|
||||
case let .nonHTTPResponse(response):
|
||||
return "Response is not NSHTTPURLResponse `\(response)`."
|
||||
case let .HTTPRequestFailed(response, _):
|
||||
case let .httpRequestFailed(response, _):
|
||||
return "HTTP request failed with `\(response.statusCode)`."
|
||||
case let .DeserializationError(error):
|
||||
case let .deserializationError(error):
|
||||
return "Error during deserialization of the response: \(error)"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func escapeTerminalString(value: String) -> String {
|
||||
return value.stringByReplacingOccurrencesOfString("\"", withString: "\\\"", options:[], range: nil)
|
||||
func escapeTerminalString(_ value: String) -> String {
|
||||
return value.replacingOccurrences(of: "\"", with: "\\\"", options:[], range: nil)
|
||||
}
|
||||
|
||||
func convertURLRequestToCurlCommand(request: NSURLRequest) -> String {
|
||||
let method = request.HTTPMethod ?? "GET"
|
||||
func convertURLRequestToCurlCommand(_ request: URLRequest) -> String {
|
||||
let method = request.httpMethod ?? "GET"
|
||||
var returnValue = "curl -X \(method) "
|
||||
|
||||
if request.HTTPMethod == "POST" && request.HTTPBody != nil {
|
||||
let maybeBody = NSString(data: request.HTTPBody!, encoding: NSUTF8StringEncoding) as? String
|
||||
if request.httpMethod == "POST" && request.httpBody != nil {
|
||||
let maybeBody = NSString(data: request.httpBody!, encoding: String.Encoding.utf8.rawValue) as? String
|
||||
if let body = maybeBody {
|
||||
returnValue += "-d \"\(escapeTerminalString(body))\" "
|
||||
}
|
||||
|
|
@ -74,7 +74,7 @@ func convertURLRequestToCurlCommand(request: NSURLRequest) -> String {
|
|||
returnValue += "\n -H \"\(escapedKey): \(escapedValue)\" "
|
||||
}
|
||||
|
||||
let URLString = request.URL?.absoluteString ?? "<unknown url>"
|
||||
let URLString = request.url?.absoluteString ?? "<unknown url>"
|
||||
|
||||
returnValue += "\n\"\(escapeTerminalString(URLString))\""
|
||||
|
||||
|
|
@ -83,10 +83,10 @@ func convertURLRequestToCurlCommand(request: NSURLRequest) -> String {
|
|||
return returnValue
|
||||
}
|
||||
|
||||
func convertResponseToString(data: NSData!, _ response: NSURLResponse!, _ error: NSError!, _ interval: NSTimeInterval) -> String {
|
||||
func convertResponseToString(_ data: Data!, _ response: URLResponse!, _ error: NSError!, _ interval: TimeInterval) -> String {
|
||||
let ms = Int(interval * 1000)
|
||||
|
||||
if let response = response as? NSHTTPURLResponse {
|
||||
if let response = response as? HTTPURLResponse {
|
||||
if 200 ..< 300 ~= response.statusCode {
|
||||
return "Success (\(ms)ms): Status \(response.statusCode)"
|
||||
}
|
||||
|
|
@ -105,7 +105,7 @@ func convertResponseToString(data: NSData!, _ response: NSURLResponse!, _ error:
|
|||
return "<Unhandled response from server>"
|
||||
}
|
||||
|
||||
extension NSURLSession {
|
||||
extension URLSession {
|
||||
/**
|
||||
Observable sequence of responses for URL request.
|
||||
|
||||
|
|
@ -118,37 +118,37 @@ extension NSURLSession {
|
|||
- parameter request: URL request.
|
||||
- returns: Observable sequence of URL responses.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func rx_response(request: NSURLRequest) -> Observable<(NSData, NSHTTPURLResponse)> {
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func rx_response(_ request: URLRequest) -> Observable<(Data, HTTPURLResponse)> {
|
||||
return Observable.create { observer in
|
||||
|
||||
// smart compiler should be able to optimize this out
|
||||
var d: NSDate?
|
||||
var d: Date?
|
||||
|
||||
if Logging.URLRequests(request) {
|
||||
d = NSDate()
|
||||
d = Date()
|
||||
}
|
||||
|
||||
let task = self.dataTaskWithRequest(request) { (data, response, error) in
|
||||
let task = self.dataTask(with: request) { (data, response, error) in
|
||||
|
||||
if Logging.URLRequests(request) {
|
||||
let interval = NSDate().timeIntervalSinceDate(d ?? NSDate())
|
||||
let interval = Date().timeIntervalSince(d ?? Date())
|
||||
print(convertURLRequestToCurlCommand(request))
|
||||
print(convertResponseToString(data, response, error, interval))
|
||||
}
|
||||
|
||||
guard let response = response, data = data else {
|
||||
observer.on(.Error(error ?? RxCocoaURLError.Unknown))
|
||||
observer.on(.error(error ?? RxCocoaURLError.unknown))
|
||||
return
|
||||
}
|
||||
|
||||
guard let httpResponse = response as? NSHTTPURLResponse else {
|
||||
observer.on(.Error(RxCocoaURLError.NonHTTPResponse(response: response)))
|
||||
guard let httpResponse = response as? HTTPURLResponse else {
|
||||
observer.on(.error(RxCocoaURLError.nonHTTPResponse(response: response)))
|
||||
return
|
||||
}
|
||||
|
||||
observer.on(.Next(data, httpResponse))
|
||||
observer.on(.Completed)
|
||||
observer.on(.next(data, httpResponse))
|
||||
observer.on(.completed)
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -174,14 +174,14 @@ extension NSURLSession {
|
|||
- parameter request: URL request.
|
||||
- returns: Observable sequence of response data.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func rx_data(request: NSURLRequest) -> Observable<NSData> {
|
||||
return rx_response(request).map { (data, response) -> NSData in
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func rx_data(_ request: URLRequest) -> Observable<Data> {
|
||||
return rx_response(request).map { (data, response) -> Data in
|
||||
if 200 ..< 300 ~= response.statusCode {
|
||||
return data
|
||||
}
|
||||
else {
|
||||
throw RxCocoaURLError.HTTPRequestFailed(response: response, data: data)
|
||||
throw RxCocoaURLError.httpRequestFailed(response: response, data: data)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -203,13 +203,13 @@ extension NSURLSession {
|
|||
- parameter request: URL request.
|
||||
- returns: Observable sequence of response JSON.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func rx_JSON(request: NSURLRequest) -> Observable<AnyObject> {
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func rx_JSON(_ request: URLRequest) -> Observable<AnyObject> {
|
||||
return rx_data(request).map { (data) -> AnyObject in
|
||||
do {
|
||||
return try NSJSONSerialization.JSONObjectWithData(data, options: [])
|
||||
return try JSONSerialization.jsonObject(with: data, options: [])
|
||||
} catch let error {
|
||||
throw RxCocoaURLError.DeserializationError(error: error)
|
||||
throw RxCocoaURLError.deserializationError(error: error)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -231,8 +231,8 @@ extension NSURLSession {
|
|||
- parameter URL: URL of `NSURLRequest` request.
|
||||
- returns: Observable sequence of response JSON.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
public func rx_JSON(URL: NSURL) -> Observable<AnyObject> {
|
||||
return rx_JSON(NSURLRequest(URL: URL))
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func rx_JSON(_ URL: Foundation.URL) -> Observable<AnyObject> {
|
||||
return rx_JSON(URLRequest(url: URL))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,12 +15,12 @@ class RxCLLocationManagerDelegateProxy : DelegateProxy
|
|||
, CLLocationManagerDelegate
|
||||
, DelegateProxyType {
|
||||
|
||||
class func currentDelegateFor(object: AnyObject) -> AnyObject? {
|
||||
class func currentDelegateFor(_ object: AnyObject) -> AnyObject? {
|
||||
let locationManager: CLLocationManager = castOrFatalError(object)
|
||||
return locationManager.delegate
|
||||
}
|
||||
|
||||
class func setCurrentDelegate(delegate: AnyObject?, toObject object: AnyObject) {
|
||||
class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) {
|
||||
let locationManager: CLLocationManager = castOrFatalError(object)
|
||||
locationManager.delegate = castOptionalOrFatalError(delegate)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,31 +23,31 @@ public enum RxCocoaError
|
|||
/**
|
||||
Unknown error has occurred.
|
||||
*/
|
||||
case Unknown
|
||||
case unknown
|
||||
/**
|
||||
Invalid operation was attempted.
|
||||
*/
|
||||
case InvalidOperation(object: AnyObject)
|
||||
case invalidOperation(object: AnyObject)
|
||||
/**
|
||||
Items are not yet bound to user interface but have been requested.
|
||||
*/
|
||||
case ItemsNotYetBound(object: AnyObject)
|
||||
case itemsNotYetBound(object: AnyObject)
|
||||
/**
|
||||
Invalid KVO Path.
|
||||
*/
|
||||
case InvalidPropertyName(object: AnyObject, propertyName: String)
|
||||
case invalidPropertyName(object: AnyObject, propertyName: String)
|
||||
/**
|
||||
Invalid object on key path.
|
||||
*/
|
||||
case InvalidObjectOnKeyPath(object: AnyObject, sourceObject: AnyObject, propertyName: String)
|
||||
case invalidObjectOnKeyPath(object: AnyObject, sourceObject: AnyObject, propertyName: String)
|
||||
/**
|
||||
Error during swizzling.
|
||||
*/
|
||||
case ErrorDuringSwizzling
|
||||
case errorDuringSwizzling
|
||||
/*
|
||||
Casting error.
|
||||
*/
|
||||
case CastingError(object: AnyObject, targetType: Any.Type)
|
||||
case castingError(object: AnyObject, targetType: Any.Type)
|
||||
}
|
||||
|
||||
#if !DISABLE_SWIZZLING
|
||||
|
|
@ -58,11 +58,11 @@ public enum RxCocoaInterceptionMechanism {
|
|||
/**
|
||||
Unknown message interception mechanism.
|
||||
*/
|
||||
case Unknown
|
||||
case unknown
|
||||
/**
|
||||
Key value observing interception mechanism.
|
||||
*/
|
||||
case KVO
|
||||
case kvo
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -74,7 +74,7 @@ public enum RxCocoaObjCRuntimeError
|
|||
/**
|
||||
Unknown error has occurred.
|
||||
*/
|
||||
case Unknown(target: AnyObject)
|
||||
case unknown(target: AnyObject)
|
||||
|
||||
/**
|
||||
If the object is reporting a different class then it's real class, that means that there is probably
|
||||
|
|
@ -101,12 +101,12 @@ public enum RxCocoaObjCRuntimeError
|
|||
it's highly unlikely it would have any benefit in real world use cases, and it's even more
|
||||
dangerous.
|
||||
*/
|
||||
case ObjectMessagesAlreadyBeingIntercepted(target: AnyObject, interceptionMechanism: RxCocoaInterceptionMechanism)
|
||||
case objectMessagesAlreadyBeingIntercepted(target: AnyObject, interceptionMechanism: RxCocoaInterceptionMechanism)
|
||||
|
||||
/**
|
||||
Trying to observe messages for selector that isn't implemented.
|
||||
*/
|
||||
case SelectorNotImplemented(target: AnyObject)
|
||||
case selectorNotImplemented(target: AnyObject)
|
||||
|
||||
/**
|
||||
Core Foundation classes are usually toll free bridged. Those classes crash the program in case
|
||||
|
|
@ -115,7 +115,7 @@ public enum RxCocoaObjCRuntimeError
|
|||
There is a possibility to just swizzle methods on original object, but since those won't be usual use
|
||||
cases for this library, then an error will just be reported for now.
|
||||
*/
|
||||
case CantInterceptCoreFoundationTollFreeBridgedObjects(target: AnyObject)
|
||||
case cantInterceptCoreFoundationTollFreeBridgedObjects(target: AnyObject)
|
||||
|
||||
/**
|
||||
Two libraries have simultaneously tried to modify ObjC runtime and that was detected. This can only
|
||||
|
|
@ -124,17 +124,17 @@ public enum RxCocoaObjCRuntimeError
|
|||
To synchronize other libraries intercepting messages for an object, use `synchronized` on target object and
|
||||
it's meta-class.
|
||||
*/
|
||||
case ThreadingCollisionWithOtherInterceptionMechanism(target: AnyObject)
|
||||
case threadingCollisionWithOtherInterceptionMechanism(target: AnyObject)
|
||||
|
||||
/**
|
||||
For some reason saving original method implementation under RX namespace failed.
|
||||
*/
|
||||
case SavingOriginalForwardingMethodFailed(target: AnyObject)
|
||||
case savingOriginalForwardingMethodFailed(target: AnyObject)
|
||||
|
||||
/**
|
||||
Intercepting a sent message by replacing a method implementation with `_objc_msgForward` failed for some reason.
|
||||
*/
|
||||
case ReplacingMethodWithForwardingImplementation(target: AnyObject)
|
||||
case replacingMethodWithForwardingImplementation(target: AnyObject)
|
||||
|
||||
/**
|
||||
Attempt to intercept one of the performance sensitive methods:
|
||||
|
|
@ -143,7 +143,7 @@ public enum RxCocoaObjCRuntimeError
|
|||
* methodSignatureForSelector:
|
||||
* forwardingTargetForSelector:
|
||||
*/
|
||||
case ObservingPerformanceSensitiveMessages(target: AnyObject)
|
||||
case observingPerformanceSensitiveMessages(target: AnyObject)
|
||||
|
||||
/**
|
||||
Message implementation has unsupported return type (for example large struct). The reason why this is a error
|
||||
|
|
@ -152,7 +152,7 @@ public enum RxCocoaObjCRuntimeError
|
|||
|
||||
The unsupported cases should be fairly uncommon.
|
||||
*/
|
||||
case ObservingMessagesWithUnsupportedReturnType(target: AnyObject)
|
||||
case observingMessagesWithUnsupportedReturnType(target: AnyObject)
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -165,19 +165,19 @@ public extension RxCocoaError {
|
|||
*/
|
||||
public var debugDescription: String {
|
||||
switch self {
|
||||
case .Unknown:
|
||||
case .unknown:
|
||||
return "Unknown error occurred."
|
||||
case let .InvalidOperation(object):
|
||||
case let .invalidOperation(object):
|
||||
return "Invalid operation was attempted on `\(object)`."
|
||||
case let .ItemsNotYetBound(object):
|
||||
case let .itemsNotYetBound(object):
|
||||
return "Data source is set, but items are not yet bound to user interface for `\(object)`."
|
||||
case let .InvalidPropertyName(object, propertyName):
|
||||
case let .invalidPropertyName(object, propertyName):
|
||||
return "Object `\(object)` dosn't have a property named `\(propertyName)`."
|
||||
case let .InvalidObjectOnKeyPath(object, sourceObject, propertyName):
|
||||
case let .invalidObjectOnKeyPath(object, sourceObject, propertyName):
|
||||
return "Unobservable object `\(object)` was observed as `\(propertyName)` of `\(sourceObject)`."
|
||||
case .ErrorDuringSwizzling:
|
||||
case .errorDuringSwizzling:
|
||||
return "Error during swizzling."
|
||||
case .CastingError(let object, let targetType):
|
||||
case .castingError(let object, let targetType):
|
||||
return "Error casting `\(object)` to `\(targetType)`"
|
||||
}
|
||||
}
|
||||
|
|
@ -191,25 +191,25 @@ public extension RxCocoaObjCRuntimeError {
|
|||
*/
|
||||
public var debugDescription: String {
|
||||
switch self {
|
||||
case let .Unknown(target):
|
||||
case let .unknown(target):
|
||||
return "Unknown error occurred.\nTarget: `\(target)`"
|
||||
case let ObjectMessagesAlreadyBeingIntercepted(target, interceptionMechanism):
|
||||
let interceptionMechanismDescription = interceptionMechanism == .KVO ? "KVO" : "other interception mechanism"
|
||||
case let objectMessagesAlreadyBeingIntercepted(target, interceptionMechanism):
|
||||
let interceptionMechanismDescription = interceptionMechanism == .kvo ? "KVO" : "other interception mechanism"
|
||||
return "Collision between RxCocoa interception mechanism and \(interceptionMechanismDescription)."
|
||||
+ " To resolve this conflict please use this interception mechanism first.\nTarget: \(target)"
|
||||
case let SelectorNotImplemented(target):
|
||||
case let selectorNotImplemented(target):
|
||||
return "Trying to observe messages for selector that isn't implemented.\nTarget: \(target)"
|
||||
case let CantInterceptCoreFoundationTollFreeBridgedObjects(target):
|
||||
case let cantInterceptCoreFoundationTollFreeBridgedObjects(target):
|
||||
return "Interception of messages sent to Core Foundation isn't supported.\nTarget: \(target)"
|
||||
case let ThreadingCollisionWithOtherInterceptionMechanism(target):
|
||||
case let threadingCollisionWithOtherInterceptionMechanism(target):
|
||||
return "Detected a conflict while modifying ObjC runtime.\nTarget: \(target)"
|
||||
case let SavingOriginalForwardingMethodFailed(target):
|
||||
case let savingOriginalForwardingMethodFailed(target):
|
||||
return "Saving original method implementation failed.\nTarget: \(target)"
|
||||
case let ReplacingMethodWithForwardingImplementation(target):
|
||||
case let replacingMethodWithForwardingImplementation(target):
|
||||
return "Intercepting a sent message by replacing a method implementation with `_objc_msgForward` failed for some reason.\nTarget: \(target)"
|
||||
case let ObservingPerformanceSensitiveMessages(target):
|
||||
case let observingPerformanceSensitiveMessages(target):
|
||||
return "Attempt to intercept one of the performance sensitive methods. \nTarget: \(target)"
|
||||
case let ObservingMessagesWithUnsupportedReturnType(target):
|
||||
case let observingMessagesWithUnsupportedReturnType(target):
|
||||
return "Attempt to intercept a method with unsupported return type. \nTarget: \(target)"
|
||||
}
|
||||
}
|
||||
|
|
@ -251,7 +251,7 @@ func castOptionalOrFatalError<T>(_ value: AnyObject?) -> T? {
|
|||
|
||||
func castOrThrow<T>(_ resultType: T.Type, _ object: AnyObject) throws -> T {
|
||||
guard let returnValue = object as? T else {
|
||||
throw RxCocoaError.CastingError(object: object, targetType: resultType)
|
||||
throw RxCocoaError.castingError(object: object, targetType: resultType)
|
||||
}
|
||||
|
||||
return returnValue
|
||||
|
|
@ -263,7 +263,7 @@ func castOptionalOrThrow<T>(_ resultType: T.Type, _ object: AnyObject) throws ->
|
|||
}
|
||||
|
||||
guard let returnValue = object as? T else {
|
||||
throw RxCocoaError.CastingError(object: object, targetType: resultType)
|
||||
throw RxCocoaError.castingError(object: object, targetType: resultType)
|
||||
}
|
||||
|
||||
return returnValue
|
||||
|
|
@ -303,28 +303,28 @@ extension NSError {
|
|||
|
||||
switch errorCode {
|
||||
case .unknown:
|
||||
return .Unknown(target: target)
|
||||
return .unknown(target: target)
|
||||
case .objectMessagesAlreadyBeingIntercepted:
|
||||
let isKVO = (self.userInfo[RXObjCRuntimeErrorIsKVOKey] as? NSNumber)?.boolValue ?? false
|
||||
return .ObjectMessagesAlreadyBeingIntercepted(target: target, interceptionMechanism: isKVO ? .KVO : .Unknown)
|
||||
return .objectMessagesAlreadyBeingIntercepted(target: target, interceptionMechanism: isKVO ? .kvo : .unknown)
|
||||
case .selectorNotImplemented:
|
||||
return .SelectorNotImplemented(target: target)
|
||||
return .selectorNotImplemented(target: target)
|
||||
case .cantInterceptCoreFoundationTollFreeBridgedObjects:
|
||||
return .CantInterceptCoreFoundationTollFreeBridgedObjects(target: target)
|
||||
return .cantInterceptCoreFoundationTollFreeBridgedObjects(target: target)
|
||||
case .threadingCollisionWithOtherInterceptionMechanism:
|
||||
return .ThreadingCollisionWithOtherInterceptionMechanism(target: target)
|
||||
return .threadingCollisionWithOtherInterceptionMechanism(target: target)
|
||||
case .savingOriginalForwardingMethodFailed:
|
||||
return .SavingOriginalForwardingMethodFailed(target: target)
|
||||
return .savingOriginalForwardingMethodFailed(target: target)
|
||||
case .replacingMethodWithForwardingImplementation:
|
||||
return .ReplacingMethodWithForwardingImplementation(target: target)
|
||||
return .replacingMethodWithForwardingImplementation(target: target)
|
||||
case .observingPerformanceSensitiveMessages:
|
||||
return .ObservingPerformanceSensitiveMessages(target: target)
|
||||
return .observingPerformanceSensitiveMessages(target: target)
|
||||
case .observingMessagesWithUnsupportedReturnType:
|
||||
return .ObservingMessagesWithUnsupportedReturnType(target: target)
|
||||
return .observingMessagesWithUnsupportedReturnType(target: target)
|
||||
}
|
||||
}
|
||||
|
||||
return RxCocoaObjCRuntimeError.Unknown(target: target)
|
||||
return RxCocoaObjCRuntimeError.unknown(target: target)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -20,5 +20,5 @@ public protocol SectionedViewDataSourceType {
|
|||
- parameter indexPath: Model index path
|
||||
- returns: Model at index path.
|
||||
*/
|
||||
func modelAtIndexPath(indexPath: NSIndexPath) throws -> Any
|
||||
}
|
||||
func modelAtIndexPath(_ indexPath: IndexPath) throws -> Any
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ class _RxCollectionViewReactiveArrayDataSource
|
|||
: NSObject
|
||||
, UICollectionViewDataSource {
|
||||
|
||||
@objc(numberOfSectionsInCollectionView:)
|
||||
func numberOfSections(in: UICollectionView) -> Int {
|
||||
return 1
|
||||
}
|
||||
|
|
@ -31,11 +32,11 @@ class _RxCollectionViewReactiveArrayDataSource
|
|||
return _collectionView(collectionView, numberOfItemsInSection: section)
|
||||
}
|
||||
|
||||
func _collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: NSIndexPath) -> UICollectionViewCell {
|
||||
private func _collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
||||
rxAbstractMethod()
|
||||
}
|
||||
|
||||
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: NSIndexPath) -> UICollectionViewCell {
|
||||
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
||||
return _collectionView(collectionView, cellForItemAt: indexPath)
|
||||
}
|
||||
}
|
||||
|
|
@ -53,7 +54,7 @@ class RxCollectionViewReactiveArrayDataSourceSequenceWrapper<S: Sequence>
|
|||
UIBindingObserver(UIElement: self) { collectionViewDataSource, sectionModels in
|
||||
let sections = Array(sectionModels)
|
||||
collectionViewDataSource.collectionView(collectionView, observedElements: sections)
|
||||
}.on(event: observedEvent)
|
||||
}.on(observedEvent)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -67,14 +68,14 @@ class RxCollectionViewReactiveArrayDataSource<Element>
|
|||
|
||||
var itemModels: [Element]? = nil
|
||||
|
||||
func modelAtIndex(index: Int) -> Element? {
|
||||
func modelAtIndex(_ index: Int) -> Element? {
|
||||
return itemModels?[index]
|
||||
}
|
||||
|
||||
func modelAtIndexPath(indexPath: NSIndexPath) throws -> Any {
|
||||
precondition(indexPath.section == 0)
|
||||
guard let item = itemModels?[indexPath.item] else {
|
||||
throw RxCocoaError.ItemsNotYetBound(object: self)
|
||||
func modelAtIndexPath(_ indexPath: IndexPath) throws -> Any {
|
||||
precondition((indexPath as NSIndexPath).section == 0)
|
||||
guard let item = itemModels?[(indexPath as NSIndexPath).item] else {
|
||||
throw RxCocoaError.itemsNotYetBound(object: self)
|
||||
}
|
||||
return item
|
||||
}
|
||||
|
|
@ -91,8 +92,8 @@ class RxCollectionViewReactiveArrayDataSource<Element>
|
|||
return itemModels?.count ?? 0
|
||||
}
|
||||
|
||||
override func _collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: NSIndexPath) -> UICollectionViewCell {
|
||||
return cellFactory(collectionView, indexPath.item, itemModels![indexPath.item])
|
||||
override func _collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
||||
return cellFactory(collectionView, (indexPath as NSIndexPath).item, itemModels![(indexPath as NSIndexPath).item])
|
||||
}
|
||||
|
||||
// reactive
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ class _RxTableViewReactiveArrayDataSource
|
|||
: NSObject
|
||||
, UITableViewDataSource {
|
||||
|
||||
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
|
||||
func numberOfSections(in tableView: UITableView) -> Int {
|
||||
return 1
|
||||
}
|
||||
|
||||
|
|
@ -31,12 +31,12 @@ class _RxTableViewReactiveArrayDataSource
|
|||
return _tableView(tableView, numberOfRowsInSection: section)
|
||||
}
|
||||
|
||||
func _tableView(tableView: UITableView, cellForRowAt indexPath: NSIndexPath) -> UITableViewCell {
|
||||
private func _tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||
rxAbstractMethod()
|
||||
}
|
||||
|
||||
func tableView(tableView: UITableView, cellForRowAt indexPath: NSIndexPath) -> UITableViewCell {
|
||||
return _tableView(tableView: tableView, cellForRowAt: indexPath)
|
||||
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||
return _tableView(tableView, cellForRowAt: indexPath)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -54,7 +54,7 @@ class RxTableViewReactiveArrayDataSourceSequenceWrapper<S: Sequence>
|
|||
UIBindingObserver(UIElement: self) { tableViewDataSource, sectionModels in
|
||||
let sections = Array(sectionModels)
|
||||
tableViewDataSource.tableView(tableView, observedElements: sections)
|
||||
}.on(event: observedEvent)
|
||||
}.on(observedEvent)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -66,14 +66,14 @@ class RxTableViewReactiveArrayDataSource<Element>
|
|||
|
||||
var itemModels: [Element]? = nil
|
||||
|
||||
func modelAtIndex(index: Int) -> Element? {
|
||||
func modelAtIndex(_ index: Int) -> Element? {
|
||||
return itemModels?[index]
|
||||
}
|
||||
|
||||
func modelAtIndexPath(indexPath: NSIndexPath) throws -> Any {
|
||||
precondition(indexPath.section == 0)
|
||||
guard let item = itemModels?[indexPath.item] else {
|
||||
throw RxCocoaError.ItemsNotYetBound(object: self)
|
||||
func modelAtIndexPath(_ indexPath: IndexPath) throws -> Any {
|
||||
precondition((indexPath as NSIndexPath).section == 0)
|
||||
guard let item = itemModels?[(indexPath as NSIndexPath).item] else {
|
||||
throw RxCocoaError.itemsNotYetBound(object: self)
|
||||
}
|
||||
return item
|
||||
}
|
||||
|
|
@ -88,8 +88,8 @@ class RxTableViewReactiveArrayDataSource<Element>
|
|||
return itemModels?.count ?? 0
|
||||
}
|
||||
|
||||
override func _tableView(_ tableView: UITableView, cellForRowAt indexPath: NSIndexPath) -> UITableViewCell {
|
||||
return cellFactory(tableView, indexPath.item, itemModels![indexPath.row])
|
||||
override func _tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||
return cellFactory(tableView, (indexPath as NSIndexPath).item, itemModels![(indexPath as NSIndexPath).row])
|
||||
}
|
||||
|
||||
// reactive
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import Foundation
|
|||
import UIKit
|
||||
|
||||
#if os(iOS) || os(tvOS)
|
||||
public typealias ItemMovedEvent = (sourceIndex: NSIndexPath, destinationIndex: NSIndexPath)
|
||||
public typealias WillDisplayCellEvent = (cell: UITableViewCell, indexPath: NSIndexPath)
|
||||
public typealias DidEndDisplayingCellEvent = (cell: UITableViewCell, indexPath: NSIndexPath)
|
||||
#endif
|
||||
public typealias ItemMovedEvent = (sourceIndex: IndexPath, destinationIndex: IndexPath)
|
||||
public typealias WillDisplayCellEvent = (cell: UITableViewCell, indexPath: IndexPath)
|
||||
public typealias DidEndDisplayingCellEvent = (cell: UITableViewCell, indexPath: IndexPath)
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ extension NSTextStorage {
|
|||
*/
|
||||
public var rx_didProcessEditingRangeChangeInLength: Observable<(editedMask:NSTextStorageEditActions, editedRange:NSRange, delta:Int)> {
|
||||
return rx_delegate
|
||||
.observe(selector: #selector(NSTextStorageDelegate.textStorage(_:didProcessEditing:range:changeInLength:)))
|
||||
.observe(#selector(NSTextStorageDelegate.textStorage(_:didProcessEditing:range:changeInLength:)))
|
||||
.map { a in
|
||||
let editedMask = NSTextStorageEditActions(rawValue: try castOrThrow(UInt.self, a[1]) )
|
||||
let editedRange = try castOrThrow(NSValue.self, a[2]).rangeValue
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ class CollectionViewDataSourceNotSet
|
|||
}
|
||||
|
||||
// The cell that is returned must be retrieved from a call to -dequeueReusableCellWithReuseIdentifier:forIndexPath:
|
||||
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: NSIndexPath) -> UICollectionViewCell {
|
||||
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
||||
rxAbstractMethodWithMessage(dataSourceNotSet)
|
||||
}
|
||||
|
||||
|
|
@ -67,7 +67,7 @@ public class RxCollectionViewDataSourceProxy
|
|||
/**
|
||||
Required delegate method implementation.
|
||||
*/
|
||||
public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: NSIndexPath) -> UICollectionViewCell {
|
||||
public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
||||
return (_requiredMethodsDataSource ?? collectionViewDataSourceNotSet).collectionView(collectionView, cellForItemAt: indexPath)
|
||||
}
|
||||
|
||||
|
|
@ -76,7 +76,7 @@ public class RxCollectionViewDataSourceProxy
|
|||
/**
|
||||
For more information take a look at `DelegateProxyType`.
|
||||
*/
|
||||
public override class func createProxyForObject(object: AnyObject) -> AnyObject {
|
||||
public override class func createProxyForObject(_ object: AnyObject) -> AnyObject {
|
||||
let collectionView = (object as! UICollectionView)
|
||||
|
||||
return castOrFatalError(collectionView.rx_createDataSourceProxy())
|
||||
|
|
@ -86,13 +86,13 @@ public class RxCollectionViewDataSourceProxy
|
|||
For more information take a look at `DelegateProxyType`.
|
||||
*/
|
||||
public override class func delegateAssociatedObjectTag() -> UnsafePointer<Void> {
|
||||
return _pointer(p: &dataSourceAssociatedTag)
|
||||
return _pointer(&dataSourceAssociatedTag)
|
||||
}
|
||||
|
||||
/**
|
||||
For more information take a look at `DelegateProxyType`.
|
||||
*/
|
||||
public class func setCurrentDelegate(delegate: AnyObject?, toObject object: AnyObject) {
|
||||
public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) {
|
||||
let collectionView: UICollectionView = castOrFatalError(object)
|
||||
collectionView.dataSource = castOptionalOrFatalError(delegate)
|
||||
}
|
||||
|
|
@ -100,7 +100,7 @@ public class RxCollectionViewDataSourceProxy
|
|||
/**
|
||||
For more information take a look at `DelegateProxyType`.
|
||||
*/
|
||||
public class func currentDelegateFor(object: AnyObject) -> AnyObject? {
|
||||
public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? {
|
||||
let collectionView: UICollectionView = castOrFatalError(object)
|
||||
return collectionView.dataSource
|
||||
}
|
||||
|
|
@ -108,10 +108,10 @@ public class RxCollectionViewDataSourceProxy
|
|||
/**
|
||||
For more information take a look at `DelegateProxyType`.
|
||||
*/
|
||||
public override func setForwardToDelegate(forwardToDelegate: AnyObject?, retainDelegate: Bool) {
|
||||
public override func setForwardToDelegate(_ forwardToDelegate: AnyObject?, retainDelegate: Bool) {
|
||||
let requiredMethodsDataSource: UICollectionViewDataSource? = castOptionalOrFatalError(forwardToDelegate)
|
||||
_requiredMethodsDataSource = requiredMethodsDataSource ?? collectionViewDataSourceNotSet
|
||||
super.setForwardToDelegate(forwardToDelegate: forwardToDelegate, retainDelegate: retainDelegate)
|
||||
super.setForwardToDelegate(forwardToDelegate, retainDelegate: retainDelegate)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ public class RxImagePickerDelegateProxy
|
|||
/**
|
||||
For more information take a look at `DelegateProxyType`.
|
||||
*/
|
||||
public class func setCurrentDelegate(delegate: AnyObject?, toObject object: AnyObject) {
|
||||
public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) {
|
||||
let imagePickerController: UIImagePickerController = castOrFatalError(object)
|
||||
imagePickerController.delegate = castOptionalOrFatalError(delegate)
|
||||
}
|
||||
|
|
@ -31,7 +31,7 @@ public class RxImagePickerDelegateProxy
|
|||
/**
|
||||
For more information take a look at `DelegateProxyType`.
|
||||
*/
|
||||
public class func currentDelegateFor(object: AnyObject) -> AnyObject? {
|
||||
public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? {
|
||||
let imagePickerController: UIImagePickerController = castOrFatalError(object)
|
||||
return imagePickerController.delegate
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ public class RxPickerViewDelegateProxy
|
|||
/**
|
||||
For more information take a look at `DelegateProxyType`.
|
||||
*/
|
||||
public class func setCurrentDelegate(delegate: AnyObject?, toObject object: AnyObject) {
|
||||
public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) {
|
||||
let pickerView: UIPickerView = castOrFatalError(object)
|
||||
pickerView.delegate = castOptionalOrFatalError(delegate)
|
||||
}
|
||||
|
|
@ -30,7 +30,7 @@ public class RxPickerViewDelegateProxy
|
|||
/**
|
||||
For more information take a look at `DelegateProxyType`.
|
||||
*/
|
||||
public class func currentDelegateFor(object: AnyObject) -> AnyObject? {
|
||||
public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? {
|
||||
let pickerView: UIPickerView = castOrFatalError(object)
|
||||
return pickerView.delegate
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,9 +34,9 @@ public class RxScrollViewDelegateProxy
|
|||
*/
|
||||
internal var contentOffsetSubject: Observable<CGPoint> {
|
||||
if _contentOffsetSubject == nil {
|
||||
let replaySubject = ReplaySubject<CGPoint>.create(bufferSize: 1)
|
||||
let replaySubject = ReplaySubject<CGPoint>.create(1)
|
||||
_contentOffsetSubject = replaySubject
|
||||
replaySubject.on(event: .Next(self.scrollView?.contentOffset ?? CGPoint.zero))
|
||||
replaySubject.on(.next(self.scrollView?.contentOffset ?? CGPoint.zero))
|
||||
}
|
||||
|
||||
return _contentOffsetSubject!
|
||||
|
|
@ -57,9 +57,9 @@ public class RxScrollViewDelegateProxy
|
|||
/**
|
||||
For more information take a look at `DelegateProxyType`.
|
||||
*/
|
||||
public func scrollViewDidScroll(scrollView: UIScrollView) {
|
||||
public func scrollViewDidScroll(_ scrollView: UIScrollView) {
|
||||
if let contentOffset = _contentOffsetSubject {
|
||||
contentOffset.on(event: .Next(scrollView.contentOffset))
|
||||
contentOffset.on(.next(scrollView.contentOffset))
|
||||
}
|
||||
self._forwardToDelegate?.scrollViewDidScroll?(scrollView)
|
||||
}
|
||||
|
|
@ -69,7 +69,7 @@ public class RxScrollViewDelegateProxy
|
|||
/**
|
||||
For more information take a look at `DelegateProxyType`.
|
||||
*/
|
||||
public override class func createProxyForObject(object: AnyObject) -> AnyObject {
|
||||
public override class func createProxyForObject(_ object: AnyObject) -> AnyObject {
|
||||
let scrollView = (object as! UIScrollView)
|
||||
|
||||
return castOrFatalError(scrollView.rx_createDelegateProxy())
|
||||
|
|
@ -78,7 +78,7 @@ public class RxScrollViewDelegateProxy
|
|||
/**
|
||||
For more information take a look at `DelegateProxyType`.
|
||||
*/
|
||||
public class func setCurrentDelegate(delegate: AnyObject?, toObject object: AnyObject) {
|
||||
public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) {
|
||||
let scrollView: UIScrollView = castOrFatalError(object)
|
||||
scrollView.delegate = castOptionalOrFatalError(delegate)
|
||||
}
|
||||
|
|
@ -86,14 +86,14 @@ public class RxScrollViewDelegateProxy
|
|||
/**
|
||||
For more information take a look at `DelegateProxyType`.
|
||||
*/
|
||||
public class func currentDelegateFor(object: AnyObject) -> AnyObject? {
|
||||
public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? {
|
||||
let scrollView: UIScrollView = castOrFatalError(object)
|
||||
return scrollView.delegate
|
||||
}
|
||||
|
||||
deinit {
|
||||
if let contentOffset = _contentOffsetSubject {
|
||||
contentOffset.on(event: .Completed)
|
||||
contentOffset.on(.completed)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ public class RxSearchBarDelegateProxy
|
|||
/**
|
||||
For more information take a look at `DelegateProxyType`.
|
||||
*/
|
||||
public class func currentDelegateFor(object: AnyObject) -> AnyObject? {
|
||||
public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? {
|
||||
let searchBar: UISearchBar = castOrFatalError(object)
|
||||
return searchBar.delegate
|
||||
}
|
||||
|
|
@ -33,7 +33,7 @@ public class RxSearchBarDelegateProxy
|
|||
/**
|
||||
For more information take a look at `DelegateProxyType`.
|
||||
*/
|
||||
public class func setCurrentDelegate(delegate: AnyObject?, toObject object: AnyObject) {
|
||||
public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) {
|
||||
let searchBar: UISearchBar = castOrFatalError(object)
|
||||
searchBar.delegate = castOptionalOrFatalError(delegate)
|
||||
}
|
||||
|
|
@ -44,7 +44,7 @@ public class RxSearchBarDelegateProxy
|
|||
/**
|
||||
For more information take a look at `DelegateProxyType`.
|
||||
*/
|
||||
public override class func createProxyForObject(object: AnyObject) -> AnyObject {
|
||||
public override class func createProxyForObject(_ object: AnyObject) -> AnyObject {
|
||||
let searchBar = (object as! UISearchBar)
|
||||
|
||||
return castOrFatalError(searchBar.rx_createDelegateProxy())
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ public class RxSearchControllerDelegateProxy
|
|||
/**
|
||||
For more information take a look at `DelegateProxyType`.
|
||||
*/
|
||||
public class func setCurrentDelegate(delegate: AnyObject?, toObject object: AnyObject) {
|
||||
public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) {
|
||||
let searchController: UISearchController = castOrFatalError(object)
|
||||
searchController.delegate = castOptionalOrFatalError(delegate)
|
||||
}
|
||||
|
|
@ -34,7 +34,7 @@ public class RxSearchControllerDelegateProxy
|
|||
/**
|
||||
For more information take a look at `DelegateProxyType`.
|
||||
*/
|
||||
public class func currentDelegateFor(object: AnyObject) -> AnyObject? {
|
||||
public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? {
|
||||
let searchController: UISearchController = castOrFatalError(object)
|
||||
return searchController.delegate
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,15 +19,15 @@ let tableViewDataSourceNotSet = TableViewDataSourceNotSet()
|
|||
class TableViewDataSourceNotSet
|
||||
: NSObject
|
||||
, UITableViewDataSource {
|
||||
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
|
||||
func numberOfSections(in tableView: UITableView) -> Int {
|
||||
rxAbstractMethodWithMessage(dataSourceNotSet)
|
||||
}
|
||||
|
||||
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||
rxAbstractMethodWithMessage(dataSourceNotSet)
|
||||
}
|
||||
|
||||
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
|
||||
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||
rxAbstractMethodWithMessage(dataSourceNotSet)
|
||||
}
|
||||
}
|
||||
|
|
@ -62,21 +62,21 @@ public class RxTableViewDataSourceProxy
|
|||
/**
|
||||
Required delegate method implementation.
|
||||
*/
|
||||
public func numberOfSectionsInTableView(tableView: UITableView) -> Int {
|
||||
return (_requiredMethodsDataSource ?? tableViewDataSourceNotSet).numberOfSectionsInTableView?(tableView) ?? 1
|
||||
public func numberOfSections(in tableView: UITableView) -> Int {
|
||||
return (_requiredMethodsDataSource ?? tableViewDataSourceNotSet).numberOfSections?(in: tableView) ?? 1
|
||||
}
|
||||
|
||||
/**
|
||||
Required delegate method implementation.
|
||||
*/
|
||||
public func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||
return (_requiredMethodsDataSource ?? tableViewDataSourceNotSet).tableView(tableView, numberOfRowsInSection: section)
|
||||
}
|
||||
|
||||
/**
|
||||
Required delegate method implementation.
|
||||
*/
|
||||
public func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
|
||||
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||
return (_requiredMethodsDataSource ?? tableViewDataSourceNotSet).tableView(tableView, cellForRowAt: indexPath)
|
||||
}
|
||||
|
||||
|
|
@ -85,7 +85,7 @@ public class RxTableViewDataSourceProxy
|
|||
/**
|
||||
For more information take a look at `DelegateProxyType`.
|
||||
*/
|
||||
public override class func createProxyForObject(object: AnyObject) -> AnyObject {
|
||||
public override class func createProxyForObject(_ object: AnyObject) -> AnyObject {
|
||||
let tableView = (object as! UITableView)
|
||||
|
||||
return castOrFatalError(tableView.rx_createDataSourceProxy())
|
||||
|
|
@ -95,13 +95,13 @@ public class RxTableViewDataSourceProxy
|
|||
For more information take a look at `DelegateProxyType`.
|
||||
*/
|
||||
public override class func delegateAssociatedObjectTag() -> UnsafePointer<Void> {
|
||||
return _pointer(p: &dataSourceAssociatedTag)
|
||||
return _pointer(&dataSourceAssociatedTag)
|
||||
}
|
||||
|
||||
/**
|
||||
For more information take a look at `DelegateProxyType`.
|
||||
*/
|
||||
public class func setCurrentDelegate(delegate: AnyObject?, toObject object: AnyObject) {
|
||||
public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) {
|
||||
let tableView: UITableView = castOrFatalError(object)
|
||||
tableView.dataSource = castOptionalOrFatalError(delegate)
|
||||
}
|
||||
|
|
@ -109,7 +109,7 @@ public class RxTableViewDataSourceProxy
|
|||
/**
|
||||
For more information take a look at `DelegateProxyType`.
|
||||
*/
|
||||
public class func currentDelegateFor(object: AnyObject) -> AnyObject? {
|
||||
public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? {
|
||||
let tableView: UITableView = castOrFatalError(object)
|
||||
return tableView.dataSource
|
||||
}
|
||||
|
|
@ -117,10 +117,10 @@ public class RxTableViewDataSourceProxy
|
|||
/**
|
||||
For more information take a look at `DelegateProxyType`.
|
||||
*/
|
||||
public override func setForwardToDelegate(forwardToDelegate: AnyObject?, retainDelegate: Bool) {
|
||||
public override func setForwardToDelegate(_ forwardToDelegate: AnyObject?, retainDelegate: Bool) {
|
||||
let requiredMethodsDataSource: UITableViewDataSource? = castOptionalOrFatalError(forwardToDelegate)
|
||||
_requiredMethodsDataSource = requiredMethodsDataSource ?? tableViewDataSourceNotSet
|
||||
super.setForwardToDelegate(forwardToDelegate: forwardToDelegate, retainDelegate: retainDelegate)
|
||||
super.setForwardToDelegate(forwardToDelegate, retainDelegate: retainDelegate)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ public class RxTextStorageDelegateProxy
|
|||
/**
|
||||
For more information take a look at `DelegateProxyType`.
|
||||
*/
|
||||
public class func setCurrentDelegate(delegate: AnyObject?, toObject object: AnyObject) {
|
||||
public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) {
|
||||
let textStorage: NSTextStorage = castOrFatalError(object)
|
||||
textStorage.delegate = castOptionalOrFatalError(delegate)
|
||||
}
|
||||
|
|
@ -31,7 +31,7 @@ public class RxTextStorageDelegateProxy
|
|||
/**
|
||||
For more information take a look at `DelegateProxyType`.
|
||||
*/
|
||||
public class func currentDelegateFor(object: AnyObject) -> AnyObject? {
|
||||
public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? {
|
||||
let textStorage: NSTextStorage = castOrFatalError(object)
|
||||
return textStorage.delegate
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,14 +41,14 @@ public class RxTextViewDelegateProxy
|
|||
/**
|
||||
For more information take a look at `DelegateProxyType`.
|
||||
*/
|
||||
@objc public func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
|
||||
@objc public func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
|
||||
/**
|
||||
We've had some issues with observing text changes. This is here just in case we need the same hack in future and that
|
||||
we wouldn't need to change the public interface.
|
||||
*/
|
||||
let forwardToDelegate = self.forwardToDelegate() as? UITextViewDelegate
|
||||
return forwardToDelegate?.textView?(textView,
|
||||
shouldChangeTextInRange: range,
|
||||
shouldChangeTextIn: range,
|
||||
replacementText: text) ?? true
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ extension UIAlertAction {
|
|||
*/
|
||||
public var rx_enabled: AnyObserver<Bool> {
|
||||
return UIBindingObserver(UIElement: self) { alertAction, value in
|
||||
alertAction.enabled = value
|
||||
alertAction.isEnabled = value
|
||||
}.asObserver()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ import Foundation
|
|||
*/
|
||||
public var rx_networkActivityIndicatorVisible: AnyObserver<Bool> {
|
||||
return UIBindingObserver(UIElement: self) { application, active in
|
||||
application.networkActivityIndicatorVisible = active
|
||||
application.isNetworkActivityIndicatorVisible = active
|
||||
}.asObserver()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ extension UIBarButtonItem {
|
|||
*/
|
||||
public var rx_enabled: AnyObserver<Bool> {
|
||||
return UIBindingObserver(UIElement: self) { UIElement, value in
|
||||
UIElement.enabled = value
|
||||
UIElement.isEnabled = value
|
||||
}.asObserver()
|
||||
}
|
||||
|
||||
|
|
@ -30,18 +30,18 @@ extension UIBarButtonItem {
|
|||
Reactive wrapper for target action pattern on `self`.
|
||||
*/
|
||||
public var rx_tap: ControlEvent<Void> {
|
||||
let source = rx_lazyInstanceObservable(key: &rx_tap_key) { () -> Observable<Void> in
|
||||
let source = rx_lazyInstanceObservable(&rx_tap_key) { () -> Observable<Void> in
|
||||
Observable.create { [weak self] observer in
|
||||
guard let control = self else {
|
||||
observer.on(event: .Completed)
|
||||
observer.on(.completed)
|
||||
return NopDisposable.instance
|
||||
}
|
||||
let target = BarButtonItemTarget(barButtonItem: control) {
|
||||
observer.on(event: .Next())
|
||||
observer.on(.next())
|
||||
}
|
||||
return target
|
||||
}
|
||||
.takeUntil(other: self.rx_deallocated)
|
||||
.takeUntil(self.rx_deallocated)
|
||||
.share()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ extension UIButton {
|
|||
Reactive wrapper for `TouchUpInside` control event.
|
||||
*/
|
||||
public var rx_tap: ControlEvent<Void> {
|
||||
return rx_controlEvent(controlEvents: .touchUpInside)
|
||||
return rx_controlEvent(.touchUpInside)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -41,7 +41,7 @@ extension UIButton {
|
|||
Reactive wrapper for `PrimaryActionTriggered` control event.
|
||||
*/
|
||||
public var rx_primaryAction: ControlEvent<Void> {
|
||||
return rx_controlEvent(.PrimaryActionTriggered)
|
||||
return rx_controlEvent(.primaryActionTriggered)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -25,9 +25,9 @@ extension UICollectionView {
|
|||
- parameter cellFactory: Transform between sequence elements and view cells.
|
||||
- returns: Disposable object that can be used to unbind.
|
||||
*/
|
||||
public func rx_itemsWithCellFactory<S: SequenceType, O: ObservableType where O.E == S>
|
||||
(source: O)
|
||||
-> (cellFactory: (UICollectionView, Int, S.Generator.Element) -> UICollectionViewCell)
|
||||
public func rx_itemsWithCellFactory<S: Sequence, O: ObservableType where O.E == S>
|
||||
(_ source: O)
|
||||
-> (cellFactory: (UICollectionView, Int, S.Iterator.Element) -> UICollectionViewCell)
|
||||
-> Disposable {
|
||||
return { cellFactory in
|
||||
let dataSource = RxCollectionViewReactiveArrayDataSourceSequenceWrapper<S>(cellFactory: cellFactory)
|
||||
|
|
@ -45,16 +45,16 @@ extension UICollectionView {
|
|||
- parameter cellType: Type of table view cell.
|
||||
- returns: Disposable object that can be used to unbind.
|
||||
*/
|
||||
public func rx_itemsWithCellIdentifier<S: SequenceType, Cell: UICollectionViewCell, O : ObservableType where O.E == S>
|
||||
(cellIdentifier: String, cellType: Cell.Type = Cell.self)
|
||||
public func rx_itemsWithCellIdentifier<S: Sequence, Cell: UICollectionViewCell, O : ObservableType where O.E == S>
|
||||
(_ cellIdentifier: String, cellType: Cell.Type = Cell.self)
|
||||
-> (source: O)
|
||||
-> (configureCell: (Int, S.Generator.Element, Cell) -> Void)
|
||||
-> (configureCell: (Int, S.Iterator.Element, Cell) -> Void)
|
||||
-> Disposable {
|
||||
return { source in
|
||||
return { configureCell in
|
||||
let dataSource = RxCollectionViewReactiveArrayDataSourceSequenceWrapper<S> { (cv, i, item) in
|
||||
let indexPath = NSIndexPath(forItem: i, inSection: 0)
|
||||
let cell = cv.dequeueReusableCellWithReuseIdentifier(cellIdentifier, forIndexPath: indexPath) as! Cell
|
||||
let indexPath = IndexPath(item: i, section: 0)
|
||||
let cell = cv.dequeueReusableCell(withReuseIdentifier: cellIdentifier, for: indexPath) as! Cell
|
||||
configureCell(i, item, cell)
|
||||
return cell
|
||||
}
|
||||
|
|
@ -75,7 +75,7 @@ extension UICollectionView {
|
|||
DataSource: protocol<RxCollectionViewDataSourceType, UICollectionViewDataSource>,
|
||||
O: ObservableType where DataSource.Element == O.E
|
||||
>
|
||||
(dataSource: DataSource)
|
||||
(_ dataSource: DataSource)
|
||||
-> (source: O)
|
||||
-> Disposable {
|
||||
return { source in
|
||||
|
|
@ -126,7 +126,7 @@ extension UICollectionView {
|
|||
- parameter dataSource: Data source object.
|
||||
- returns: Disposable object that can be used to unbind the data source.
|
||||
*/
|
||||
public func rx_setDataSource(dataSource: UICollectionViewDataSource)
|
||||
public func rx_setDataSource(_ dataSource: UICollectionViewDataSource)
|
||||
-> Disposable {
|
||||
return RxCollectionViewDataSourceProxy.installForwardDelegate(dataSource, retainDelegate: false, onProxyForObject: self)
|
||||
}
|
||||
|
|
@ -134,10 +134,10 @@ extension UICollectionView {
|
|||
/**
|
||||
Reactive wrapper for `delegate` message `collectionView:didSelectItemAtIndexPath:`.
|
||||
*/
|
||||
public var rx_itemSelected: ControlEvent<NSIndexPath> {
|
||||
let source = rx_delegate.observe(#selector(UICollectionViewDelegate.collectionView(_:didSelectItemAtIndexPath:)))
|
||||
public var rx_itemSelected: ControlEvent<IndexPath> {
|
||||
let source = rx_delegate.observe(#selector(UICollectionViewDelegate.collectionView(_:didSelectItemAt:)))
|
||||
.map { a in
|
||||
return a[1] as! NSIndexPath
|
||||
return a[1] as! IndexPath
|
||||
}
|
||||
|
||||
return ControlEvent(events: source)
|
||||
|
|
@ -146,10 +146,10 @@ extension UICollectionView {
|
|||
/**
|
||||
Reactive wrapper for `delegate` message `collectionView:didSelectItemAtIndexPath:`.
|
||||
*/
|
||||
public var rx_itemDeselected: ControlEvent<NSIndexPath> {
|
||||
let source = rx_delegate.observe(#selector(UICollectionViewDelegate.collectionView(_:didDeselectItemAtIndexPath:)))
|
||||
public var rx_itemDeselected: ControlEvent<IndexPath> {
|
||||
let source = rx_delegate.observe(#selector(UICollectionViewDelegate.collectionView(_:didDeselectItemAt:)))
|
||||
.map { a in
|
||||
return a[1] as! NSIndexPath
|
||||
return a[1] as! IndexPath
|
||||
}
|
||||
|
||||
return ControlEvent(events: source)
|
||||
|
|
@ -166,7 +166,7 @@ extension UICollectionView {
|
|||
.map { ...
|
||||
```
|
||||
*/
|
||||
public func rx_modelSelected<T>(modelType: T.Type) -> ControlEvent<T> {
|
||||
public func rx_modelSelected<T>(_ modelType: T.Type) -> ControlEvent<T> {
|
||||
let source: Observable<T> = rx_itemSelected.flatMap { [weak self] indexPath -> Observable<T> in
|
||||
guard let view = self else {
|
||||
return Observable.empty()
|
||||
|
|
@ -189,7 +189,7 @@ extension UICollectionView {
|
|||
.map { ...
|
||||
```
|
||||
*/
|
||||
public func rx_modelDeselected<T>(modelType: T.Type) -> ControlEvent<T> {
|
||||
public func rx_modelDeselected<T>(_ modelType: T.Type) -> ControlEvent<T> {
|
||||
let source: Observable<T> = rx_itemDeselected.flatMap { [weak self] indexPath -> Observable<T> in
|
||||
guard let view = self else {
|
||||
return Observable.empty()
|
||||
|
|
@ -204,7 +204,7 @@ extension UICollectionView {
|
|||
/**
|
||||
Syncronous helper method for retrieving a model at indexPath through a reactive data source
|
||||
*/
|
||||
public func rx_modelAtIndexPath<T>(indexPath: NSIndexPath) throws -> T {
|
||||
public func rx_modelAtIndexPath<T>(_ indexPath: IndexPath) throws -> T {
|
||||
let dataSource: SectionedViewDataSourceType = castOrFatalError(self.rx_dataSource.forwardToDelegate(), message: "This method only works in case one of the `rx_itemsWith*` methods was used.")
|
||||
|
||||
let element = try dataSource.modelAtIndexPath(indexPath)
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ extension UIControl {
|
|||
*/
|
||||
public var rx_enabled: AnyObserver<Bool> {
|
||||
return UIBindingObserver(UIElement: self) { control, value in
|
||||
control.enabled = value
|
||||
control.isEnabled = value
|
||||
}.asObserver()
|
||||
}
|
||||
|
||||
|
|
@ -30,7 +30,7 @@ extension UIControl {
|
|||
*/
|
||||
public var rx_selected: AnyObserver<Bool> {
|
||||
return UIBindingObserver(UIElement: self) { control, selected in
|
||||
control.selected = selected
|
||||
control.isSelected = selected
|
||||
}.asObserver()
|
||||
}
|
||||
|
||||
|
|
@ -39,18 +39,18 @@ extension UIControl {
|
|||
|
||||
- parameter controlEvents: Filter for observed event types.
|
||||
*/
|
||||
public func rx_controlEvent(controlEvents: UIControlEvents) -> ControlEvent<Void> {
|
||||
public func rx_controlEvent(_ controlEvents: UIControlEvents) -> ControlEvent<Void> {
|
||||
let source: Observable<Void> = Observable.create { [weak self] observer in
|
||||
MainScheduler.ensureExecutingOnScheduler()
|
||||
|
||||
guard let control = self else {
|
||||
observer.on(.Completed)
|
||||
observer.on(.completed)
|
||||
return NopDisposable.instance
|
||||
}
|
||||
|
||||
let controlTarget = ControlTarget(control: control, controlEvents: controlEvents) {
|
||||
control in
|
||||
observer.on(.Next())
|
||||
observer.on(.next())
|
||||
}
|
||||
|
||||
return AnonymousDisposable(controlTarget.dispose)
|
||||
|
|
@ -63,18 +63,18 @@ extension UIControl {
|
|||
You might be wondering why the ugly `as!` casts etc, well, for some reason if
|
||||
Swift compiler knows C is UIControl type and optimizations are turned on, it will crash.
|
||||
*/
|
||||
static func rx_value<C: AnyObject, T: Equatable>(control: C, getter: (C) -> T, setter: (C, T) -> Void) -> ControlProperty<T> {
|
||||
static func rx_value<C: AnyObject, T: Equatable>(_ control: C, getter: (C) -> T, setter: (C, T) -> Void) -> ControlProperty<T> {
|
||||
let source: Observable<T> = Observable.create { [weak weakControl = control] observer in
|
||||
guard let control = weakControl else {
|
||||
observer.on(.Completed)
|
||||
observer.on(.completed)
|
||||
return NopDisposable.instance
|
||||
}
|
||||
|
||||
observer.on(.Next(getter(control)))
|
||||
observer.on(.next(getter(control)))
|
||||
|
||||
let controlTarget = ControlTarget(control: control as! UIControl, controlEvents: [.AllEditingEvents, .ValueChanged]) { _ in
|
||||
let controlTarget = ControlTarget(control: control as! UIControl, controlEvents: [.allEditingEvents, .valueChanged]) { _ in
|
||||
if let control = weakControl {
|
||||
observer.on(.Next(getter(control)))
|
||||
observer.on(.next(getter(control)))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,9 +19,9 @@ extension UIDatePicker {
|
|||
/**
|
||||
Reactive wrapper for `date` property.
|
||||
*/
|
||||
public var rx_date: ControlProperty<NSDate> {
|
||||
public var rx_date: ControlProperty<Date> {
|
||||
return UIControl.rx_value(
|
||||
control: self,
|
||||
self,
|
||||
getter: { datePicker in
|
||||
datePicker.date
|
||||
}, setter: { datePicker, value in
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ class GestureTarget<Recognizer: UIGestureRecognizer>: RxTarget {
|
|||
|
||||
gestureRecognizer.addTarget(self, action: selector)
|
||||
|
||||
let method = self.methodForSelector(selector)
|
||||
let method = self.method(for: selector)
|
||||
if method == nil {
|
||||
fatalError("Can't find method")
|
||||
}
|
||||
|
|
@ -63,17 +63,17 @@ extension Reactive where Self: UIGestureRecognizer {
|
|||
MainScheduler.ensureExecutingOnScheduler()
|
||||
|
||||
guard let control = self else {
|
||||
observer.on(event: .Completed)
|
||||
observer.on(.completed)
|
||||
return NopDisposable.instance
|
||||
}
|
||||
|
||||
let observer = GestureTarget(control) {
|
||||
control in
|
||||
observer.on(event: .Next(control))
|
||||
observer.on(.next(control))
|
||||
}
|
||||
|
||||
return observer
|
||||
}.takeUntil(other: rx_deallocated)
|
||||
}.takeUntil(rx_deallocated)
|
||||
|
||||
return ControlEvent(events: source)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ extension UIImageView {
|
|||
Bindable sink for `image` property.
|
||||
*/
|
||||
public var rx_image: AnyObserver<UIImage?> {
|
||||
return self.rx_imageAnimated(transitionType: nil)
|
||||
return self.rx_imageAnimated(nil)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -28,7 +28,7 @@ extension UIImageView {
|
|||
|
||||
- parameter transitionType: Optional transition type while setting the image (kCATransitionFade, kCATransitionMoveIn, ...)
|
||||
*/
|
||||
public func rx_imageAnimated(transitionType: String?) -> AnyObserver<UIImage?> {
|
||||
public func rx_imageAnimated(_ transitionType: String?) -> AnyObserver<UIImage?> {
|
||||
return UIBindingObserver(UIElement: self) { imageView, image in
|
||||
if let transitionType = transitionType {
|
||||
if image != nil {
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ extension UILabel {
|
|||
/**
|
||||
Bindable sink for `attributedText` property.
|
||||
*/
|
||||
public var rx_attributedText: AnyObserver<NSAttributedString?> {
|
||||
public var rx_attributedText: AnyObserver<AttributedString?> {
|
||||
return UIBindingObserver(UIElement: self) { label, text in
|
||||
label.attributedText = text
|
||||
}.asObserver()
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ extension UIPickerView {
|
|||
return RxPickerViewDelegateProxy.proxyForObject(self)
|
||||
}
|
||||
|
||||
public var rx_itemSelected: ControlEvent<(row: Int, component: Int)> {
|
||||
public var rx_itemSelected: ControlEvent<(Int, Int)> {
|
||||
let source = rx_delegate
|
||||
.observe(#selector(UIPickerViewDelegate.pickerView(_:didSelectRow:inComponent:)))
|
||||
.map {
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ extension UIScrollView {
|
|||
- parameter delegate: Delegate object.
|
||||
- returns: Disposable object that can be used to unbind the delegate.
|
||||
*/
|
||||
public func rx_setDelegate(delegate: UIScrollViewDelegate)
|
||||
public func rx_setDelegate(_ delegate: UIScrollViewDelegate)
|
||||
-> Disposable {
|
||||
return RxScrollViewDelegateProxy.installForwardDelegate(delegate, retainDelegate: false, onProxyForObject: self)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ extension UISearchBar {
|
|||
.map { a in
|
||||
return a[1] as? String ?? ""
|
||||
}
|
||||
.startWith(text)
|
||||
.startWith(elements: text)
|
||||
}
|
||||
|
||||
let bindingObserver = UIBindingObserver(UIElement: self) { (searchBar, text: String) in
|
||||
|
|
@ -70,7 +70,7 @@ extension UISearchBar {
|
|||
.map { a in
|
||||
return try castOrThrow(Int.self, a[1])
|
||||
}
|
||||
.startWith(index)
|
||||
.startWith(elements: index)
|
||||
}
|
||||
|
||||
let bindingObserver = UIBindingObserver(UIElement: self) { (searchBar, index: Int) in
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ extension UISearchController {
|
|||
*/
|
||||
public var rx_didDismiss: Observable<Void> {
|
||||
return rx_delegate
|
||||
.observe(selector: #selector(UISearchControllerDelegate.didDismiss(_:)))
|
||||
.observe( #selector(UISearchControllerDelegate.didDismissSearchController(_:)))
|
||||
.map {_ in}
|
||||
}
|
||||
/**
|
||||
|
|
@ -38,7 +38,7 @@ extension UISearchController {
|
|||
*/
|
||||
public var rx_didPresent: Observable<Void> {
|
||||
return rx_delegate
|
||||
.observe(selector: #selector(UISearchControllerDelegate.didPresent(_:)))
|
||||
.observe(#selector(UISearchControllerDelegate.didPresentSearchController(_:)))
|
||||
.map {_ in}
|
||||
}
|
||||
/**
|
||||
|
|
@ -46,7 +46,7 @@ extension UISearchController {
|
|||
*/
|
||||
public var rx_present: Observable<Void> {
|
||||
return rx_delegate
|
||||
.observe(selector: #selector(UISearchControllerDelegate.present(_:)))
|
||||
.observe( #selector(UISearchControllerDelegate.presentSearchController(_:)))
|
||||
.map {_ in}
|
||||
}
|
||||
/**
|
||||
|
|
@ -54,7 +54,7 @@ extension UISearchController {
|
|||
*/
|
||||
public var rx_willDismiss: Observable<Void> {
|
||||
return rx_delegate
|
||||
.observe(selector: #selector(UISearchControllerDelegate.willDismiss(_:)))
|
||||
.observe(#selector(UISearchControllerDelegate.willDismissSearchController(_:)))
|
||||
.map {_ in}
|
||||
}
|
||||
/**
|
||||
|
|
@ -62,7 +62,7 @@ extension UISearchController {
|
|||
*/
|
||||
public var rx_willPresent: Observable<Void> {
|
||||
return rx_delegate
|
||||
.observe(selector: #selector(UISearchControllerDelegate.willPresent(_:)))
|
||||
.observe( #selector(UISearchControllerDelegate.willPresentSearchController(_:)))
|
||||
.map {_ in}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ extension UISegmentedControl {
|
|||
*/
|
||||
public var rx_value: ControlProperty<Int> {
|
||||
return UIControl.rx_value(
|
||||
control: self,
|
||||
self,
|
||||
getter: { segmentedControl in
|
||||
segmentedControl.selectedSegmentIndex
|
||||
}, setter: { segmentedControl, value in
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ extension UISlider {
|
|||
*/
|
||||
public var rx_value: ControlProperty<Float> {
|
||||
return UIControl.rx_value(
|
||||
control: self,
|
||||
self,
|
||||
getter: { slider in
|
||||
slider.value
|
||||
}, setter: { slider, value in
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ extension UIStepper {
|
|||
*/
|
||||
public var rx_value: ControlProperty<Double> {
|
||||
return UIControl.rx_value(
|
||||
control: self,
|
||||
self,
|
||||
getter: { stepper in
|
||||
stepper.value
|
||||
}, setter: { stepper, value in
|
||||
|
|
|
|||
|
|
@ -23,9 +23,9 @@ extension UISwitch {
|
|||
return UIControl.rx_value(
|
||||
self,
|
||||
getter: { uiSwitch in
|
||||
uiSwitch.on
|
||||
uiSwitch.isOn
|
||||
}, setter: { uiSwitch, value in
|
||||
uiSwitch.on = value
|
||||
uiSwitch.isOn = value
|
||||
}
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,9 +25,9 @@ extension UITableView {
|
|||
- parameter cellFactory: Transform between sequence elements and view cells.
|
||||
- returns: Disposable object that can be used to unbind.
|
||||
*/
|
||||
public func rx_itemsWithCellFactory<S: SequenceType, O: ObservableType where O.E == S>
|
||||
(source: O)
|
||||
-> (cellFactory: (UITableView, Int, S.Generator.Element) -> UITableViewCell)
|
||||
public func rx_itemsWithCellFactory<S: Sequence, O: ObservableType where O.E == S>
|
||||
(_ source: O)
|
||||
-> (cellFactory: (UITableView, Int, S.Iterator.Element) -> UITableViewCell)
|
||||
-> Disposable {
|
||||
return { cellFactory in
|
||||
let dataSource = RxTableViewReactiveArrayDataSourceSequenceWrapper<S>(cellFactory: cellFactory)
|
||||
|
|
@ -45,16 +45,16 @@ extension UITableView {
|
|||
- parameter cellType: Type of table view cell.
|
||||
- returns: Disposable object that can be used to unbind.
|
||||
*/
|
||||
public func rx_itemsWithCellIdentifier<S: SequenceType, Cell: UITableViewCell, O : ObservableType where O.E == S>
|
||||
(cellIdentifier: String, cellType: Cell.Type = Cell.self)
|
||||
public func rx_itemsWithCellIdentifier<S: Sequence, Cell: UITableViewCell, O : ObservableType where O.E == S>
|
||||
(_ cellIdentifier: String, cellType: Cell.Type = Cell.self)
|
||||
-> (source: O)
|
||||
-> (configureCell: (Int, S.Generator.Element, Cell) -> Void)
|
||||
-> (configureCell: (Int, S.Iterator.Element, Cell) -> Void)
|
||||
-> Disposable {
|
||||
return { source in
|
||||
return { configureCell in
|
||||
let dataSource = RxTableViewReactiveArrayDataSourceSequenceWrapper<S> { (tv, i, item) in
|
||||
let indexPath = NSIndexPath(forItem: i, inSection: 0)
|
||||
let cell = tv.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! Cell
|
||||
let indexPath = IndexPath(item: i, section: 0)
|
||||
let cell = tv.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! Cell
|
||||
configureCell(i, item, cell)
|
||||
return cell
|
||||
}
|
||||
|
|
@ -74,7 +74,7 @@ extension UITableView {
|
|||
DataSource: protocol<RxTableViewDataSourceType, UITableViewDataSource>,
|
||||
O: ObservableType where DataSource.Element == O.E
|
||||
>
|
||||
(dataSource: DataSource)
|
||||
(_ dataSource: DataSource)
|
||||
-> (source: O)
|
||||
-> Disposable {
|
||||
return { source in
|
||||
|
|
@ -125,7 +125,7 @@ extension UITableView {
|
|||
- parameter dataSource: Data source object.
|
||||
- returns: Disposable object that can be used to unbind the data source.
|
||||
*/
|
||||
public func rx_setDataSource(dataSource: UITableViewDataSource)
|
||||
public func rx_setDataSource(_ dataSource: UITableViewDataSource)
|
||||
-> Disposable {
|
||||
return RxTableViewDataSourceProxy.installForwardDelegate(dataSource, retainDelegate: false, onProxyForObject: self)
|
||||
}
|
||||
|
|
@ -135,10 +135,10 @@ extension UITableView {
|
|||
/**
|
||||
Reactive wrapper for `delegate` message `tableView:didSelectRowAtIndexPath:`.
|
||||
*/
|
||||
public var rx_itemSelected: ControlEvent<NSIndexPath> {
|
||||
let source = rx_delegate.observe(#selector(UITableViewDelegate.tableView(_:didSelectRowAtIndexPath:)))
|
||||
public var rx_itemSelected: ControlEvent<IndexPath> {
|
||||
let source = rx_delegate.observe(#selector(UITableViewDelegate.tableView(_:didSelectRowAt:)))
|
||||
.map { a in
|
||||
return try castOrThrow(NSIndexPath.self, a[1])
|
||||
return try castOrThrow(IndexPath.self, a[1])
|
||||
}
|
||||
|
||||
return ControlEvent(events: source)
|
||||
|
|
@ -147,10 +147,10 @@ extension UITableView {
|
|||
/**
|
||||
Reactive wrapper for `delegate` message `tableView:didDeselectRowAtIndexPath:`.
|
||||
*/
|
||||
public var rx_itemDeselected: ControlEvent<NSIndexPath> {
|
||||
let source = rx_delegate.observe(#selector(UITableViewDelegate.tableView(_:didDeselectRowAtIndexPath:)))
|
||||
public var rx_itemDeselected: ControlEvent<IndexPath> {
|
||||
let source = rx_delegate.observe(#selector(UITableViewDelegate.tableView(_:didDeselectRowAt:)))
|
||||
.map { a in
|
||||
return try castOrThrow(NSIndexPath.self, a[1])
|
||||
return try castOrThrow(IndexPath.self, a[1])
|
||||
}
|
||||
|
||||
return ControlEvent(events: source)
|
||||
|
|
@ -159,10 +159,10 @@ extension UITableView {
|
|||
/**
|
||||
Reactive wrapper for `delegate` message `tableView:accessoryButtonTappedForRowWithIndexPath:`.
|
||||
*/
|
||||
public var rx_itemAccessoryButtonTapped: ControlEvent<NSIndexPath> {
|
||||
let source: Observable<NSIndexPath> = rx_delegate.observe(#selector(UITableViewDelegate.tableView(_:accessoryButtonTappedForRowWithIndexPath:)))
|
||||
public var rx_itemAccessoryButtonTapped: ControlEvent<IndexPath> {
|
||||
let source: Observable<IndexPath> = rx_delegate.observe(#selector(UITableViewDelegate.tableView(_:accessoryButtonTappedForRowWith:)))
|
||||
.map { a in
|
||||
return try castOrThrow(NSIndexPath.self, a[1])
|
||||
return try castOrThrow(IndexPath.self, a[1])
|
||||
}
|
||||
|
||||
return ControlEvent(events: source)
|
||||
|
|
@ -171,13 +171,13 @@ extension UITableView {
|
|||
/**
|
||||
Reactive wrapper for `delegate` message `tableView:commitEditingStyle:forRowAtIndexPath:`.
|
||||
*/
|
||||
public var rx_itemInserted: ControlEvent<NSIndexPath> {
|
||||
let source = rx_dataSource.observe(#selector(UITableViewDataSource.tableView(_:commitEditingStyle:forRowAtIndexPath:)))
|
||||
public var rx_itemInserted: ControlEvent<IndexPath> {
|
||||
let source = rx_dataSource.observe(#selector(UITableViewDataSource.tableView(_:commit:forRowAt:)))
|
||||
.filter { a in
|
||||
return UITableViewCellEditingStyle(rawValue: (try castOrThrow(NSNumber.self, a[1])).integerValue) == .Insert
|
||||
return UITableViewCellEditingStyle(rawValue: (try castOrThrow(NSNumber.self, a[1])).intValue) == .insert
|
||||
}
|
||||
.map { a in
|
||||
return (try castOrThrow(NSIndexPath.self, a[2]))
|
||||
return (try castOrThrow(IndexPath.self, a[2]))
|
||||
}
|
||||
|
||||
return ControlEvent(events: source)
|
||||
|
|
@ -186,13 +186,13 @@ extension UITableView {
|
|||
/**
|
||||
Reactive wrapper for `delegate` message `tableView:commitEditingStyle:forRowAtIndexPath:`.
|
||||
*/
|
||||
public var rx_itemDeleted: ControlEvent<NSIndexPath> {
|
||||
let source = rx_dataSource.observe(#selector(UITableViewDataSource.tableView(_:commitEditingStyle:forRowAtIndexPath:)))
|
||||
public var rx_itemDeleted: ControlEvent<IndexPath> {
|
||||
let source = rx_dataSource.observe(#selector(UITableViewDataSource.tableView(_:commit:forRowAt:)))
|
||||
.filter { a in
|
||||
return UITableViewCellEditingStyle(rawValue: (try castOrThrow(NSNumber.self, a[1])).integerValue) == .Delete
|
||||
return UITableViewCellEditingStyle(rawValue: (try castOrThrow(NSNumber.self, a[1])).intValue) == .delete
|
||||
}
|
||||
.map { a in
|
||||
return try castOrThrow(NSIndexPath.self, a[2])
|
||||
return try castOrThrow(IndexPath.self, a[2])
|
||||
}
|
||||
|
||||
return ControlEvent(events: source)
|
||||
|
|
@ -202,9 +202,9 @@ extension UITableView {
|
|||
Reactive wrapper for `delegate` message `tableView:moveRowAtIndexPath:toIndexPath:`.
|
||||
*/
|
||||
public var rx_itemMoved: ControlEvent<ItemMovedEvent> {
|
||||
let source: Observable<ItemMovedEvent> = rx_dataSource.observe(#selector(UITableViewDataSource.tableView(_:moveRowAtIndexPath:toIndexPath:)))
|
||||
let source: Observable<ItemMovedEvent> = rx_dataSource.observe(#selector(UITableViewDataSource.tableView(_:moveRowAt:to:)))
|
||||
.map { a in
|
||||
return (try castOrThrow(NSIndexPath.self, a[1]), try castOrThrow(NSIndexPath.self, a[2]))
|
||||
return (try castOrThrow(IndexPath.self, a[1]), try castOrThrow(IndexPath.self, a[2]))
|
||||
}
|
||||
|
||||
return ControlEvent(events: source)
|
||||
|
|
@ -214,9 +214,9 @@ extension UITableView {
|
|||
Reactive wrapper for `delegate` message `tableView:willDisplayCell:forRowAtIndexPath:`.
|
||||
*/
|
||||
public var rx_willDisplayCell: ControlEvent<WillDisplayCellEvent> {
|
||||
let source: Observable<DidEndDisplayingCellEvent> = rx_delegate.observe(#selector(UITableViewDelegate.tableView(_:willDisplayCell:forRowAtIndexPath:)))
|
||||
let source: Observable<DidEndDisplayingCellEvent> = rx_delegate.observe(#selector(UITableViewDelegate.tableView(_:willDisplay:forRowAt:)))
|
||||
.map { a in
|
||||
return (try castOrThrow(UITableViewCell.self, a[1]), try castOrThrow(NSIndexPath.self, a[2]))
|
||||
return (try castOrThrow(UITableViewCell.self, a[1]), try castOrThrow(IndexPath.self, a[2]))
|
||||
}
|
||||
|
||||
return ControlEvent(events: source)
|
||||
|
|
@ -226,9 +226,9 @@ extension UITableView {
|
|||
Reactive wrapper for `delegate` message `tableView:didEndDisplayingCell:forRowAtIndexPath:`.
|
||||
*/
|
||||
public var rx_didEndDisplayingCell: ControlEvent<DidEndDisplayingCellEvent> {
|
||||
let source: Observable<DidEndDisplayingCellEvent> = rx_delegate.observe(#selector(UITableViewDelegate.tableView(_:didEndDisplayingCell:forRowAtIndexPath:)))
|
||||
let source: Observable<DidEndDisplayingCellEvent> = rx_delegate.observe(#selector(UITableViewDelegate.tableView(_:didEndDisplaying:forRowAt:)))
|
||||
.map { a in
|
||||
return (try castOrThrow(UITableViewCell.self, a[1]), try castOrThrow(NSIndexPath.self, a[2]))
|
||||
return (try castOrThrow(UITableViewCell.self, a[1]), try castOrThrow(IndexPath.self, a[2]))
|
||||
}
|
||||
|
||||
return ControlEvent(events: source)
|
||||
|
|
@ -245,7 +245,7 @@ extension UITableView {
|
|||
.map { ...
|
||||
```
|
||||
*/
|
||||
public func rx_modelSelected<T>(modelType: T.Type) -> ControlEvent<T> {
|
||||
public func rx_modelSelected<T>(_ modelType: T.Type) -> ControlEvent<T> {
|
||||
let source: Observable<T> = rx_itemSelected.flatMap { [weak self] indexPath -> Observable<T> in
|
||||
guard let view = self else {
|
||||
return Observable.empty()
|
||||
|
|
@ -268,7 +268,7 @@ extension UITableView {
|
|||
.map { ...
|
||||
```
|
||||
*/
|
||||
public func rx_modelDeselected<T>(modelType: T.Type) -> ControlEvent<T> {
|
||||
public func rx_modelDeselected<T>(_ modelType: T.Type) -> ControlEvent<T> {
|
||||
let source: Observable<T> = rx_itemDeselected.flatMap { [weak self] indexPath -> Observable<T> in
|
||||
guard let view = self else {
|
||||
return Observable.empty()
|
||||
|
|
@ -283,7 +283,7 @@ extension UITableView {
|
|||
/**
|
||||
Synchronous helper method for retrieving a model at indexPath through a reactive data source.
|
||||
*/
|
||||
public func rx_modelAtIndexPath<T>(indexPath: NSIndexPath) throws -> T {
|
||||
public func rx_modelAtIndexPath<T>(_ indexPath: IndexPath) throws -> T {
|
||||
let dataSource: SectionedViewDataSourceType = castOrFatalError(self.rx_dataSource.forwardToDelegate(), message: "This method only works in case one of the `rx_items*` methods was used.")
|
||||
|
||||
let element = try dataSource.modelAtIndexPath(indexPath)
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ extension UITextView : RxTextInput {
|
|||
// This observe on is here because text storage
|
||||
// will emit event while process is not completely done,
|
||||
// so rebinding a value will cause an exception to be thrown.
|
||||
.observeOn(scheduler: MainScheduler.asyncInstance)
|
||||
.observeOn(MainScheduler.asyncInstance)
|
||||
.map { _ in
|
||||
return self?.textStorage.string ?? ""
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ extension UIView {
|
|||
*/
|
||||
public var rx_hidden: AnyObserver<Bool> {
|
||||
return UIBindingObserver(UIElement: self) { view, hidden in
|
||||
view.hidden = hidden
|
||||
view.isHidden = hidden
|
||||
}.asObserver()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -916,7 +916,7 @@
|
|||
C8CC3EB01C95CB5300ABA17E /* RxTextViewDelegateProxy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxTextViewDelegateProxy.swift; sourceTree = "<group>"; };
|
||||
C8CC3EB11C95CB5300ABA17E /* UIActivityIndicatorView+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIActivityIndicatorView+Rx.swift"; sourceTree = "<group>"; };
|
||||
C8CC3EB21C95CB5300ABA17E /* UIApplication+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIApplication+Rx.swift"; sourceTree = "<group>"; };
|
||||
C8CC3EB31C95CB5300ABA17E /* UIBarButtonItem+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIBarButtonItem+Rx.swift"; sourceTree = "<group>"; };
|
||||
C8CC3EB31C95CB5300ABA17E /* UIBarButtonItem+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIBarButtonItem+Rx.swift"; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
|
||||
C8CC3EB41C95CB5300ABA17E /* UIButton+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIButton+Rx.swift"; sourceTree = "<group>"; };
|
||||
C8CC3EB51C95CB5300ABA17E /* UICollectionView+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UICollectionView+Rx.swift"; sourceTree = "<group>"; };
|
||||
C8CC3EB61C95CB5300ABA17E /* UIControl+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIControl+Rx.swift"; sourceTree = "<group>"; };
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ public struct AnyObserver<Element> : ObserverType {
|
|||
|
||||
- parameter event: Event instance.
|
||||
*/
|
||||
public func on(event: Event<Element>) {
|
||||
public func on(_ event: Event<Element>) {
|
||||
return self.observer(event)
|
||||
}
|
||||
|
||||
|
|
@ -72,4 +72,4 @@ extension ObserverType {
|
|||
public func asObserver() -> AnyObserver<E> {
|
||||
return AnyObserver(self)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,14 +41,14 @@ class AsyncLock<I: InvocableType>
|
|||
}
|
||||
// }
|
||||
|
||||
private func enqueue(action: I) -> I? {
|
||||
private func enqueue(_ action: I) -> I? {
|
||||
_lock.lock(); defer { _lock.unlock() } // {
|
||||
if _hasFaulted {
|
||||
return nil
|
||||
}
|
||||
|
||||
if _isExecuting {
|
||||
_queue.enqueue(element: action)
|
||||
_queue.enqueue(action)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
@ -70,8 +70,8 @@ class AsyncLock<I: InvocableType>
|
|||
// }
|
||||
}
|
||||
|
||||
func invoke(action: I) {
|
||||
let firstEnqueuedAction = enqueue(action: action)
|
||||
func invoke(_ action: I) {
|
||||
let firstEnqueuedAction = enqueue(action)
|
||||
|
||||
if let firstEnqueuedAction = firstEnqueuedAction {
|
||||
firstEnqueuedAction.invoke()
|
||||
|
|
|
|||
|
|
@ -59,21 +59,21 @@ protocol Lock {
|
|||
#else
|
||||
|
||||
// https://lists.swift.org/pipermail/swift-dev/Week-of-Mon-20151214/000321.html
|
||||
typealias SpinLock = NSRecursiveLock
|
||||
typealias SpinLock = RecursiveLock
|
||||
#endif
|
||||
|
||||
extension NSRecursiveLock : Lock {
|
||||
func performLocked(@noescape action: () -> Void) {
|
||||
extension RecursiveLock : Lock {
|
||||
func performLocked( _ action: @noescape() -> Void) {
|
||||
lock(); defer { unlock() }
|
||||
action()
|
||||
}
|
||||
|
||||
func calculateLocked<T>(@noescape action: () -> T) -> T {
|
||||
func calculateLocked<T>( _ action: @noescape() -> T) -> T {
|
||||
lock(); defer { unlock() }
|
||||
return action()
|
||||
}
|
||||
|
||||
func calculateLockedOrFail<T>(@noescape action: () throws -> T) throws -> T {
|
||||
func calculateLockedOrFail<T>( _ action: @noescape() throws -> T) throws -> T {
|
||||
lock(); defer { unlock() }
|
||||
let result = try action()
|
||||
return result
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
import Foundation
|
||||
|
||||
protocol LockOwnerType : class, Lock {
|
||||
var _lock: NSRecursiveLock { get }
|
||||
var _lock: RecursiveLock { get }
|
||||
}
|
||||
|
||||
extension LockOwnerType {
|
||||
|
|
@ -20,4 +20,4 @@ extension LockOwnerType {
|
|||
func unlock() {
|
||||
_lock.unlock()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,12 +9,12 @@
|
|||
import Foundation
|
||||
|
||||
protocol SynchronizedOnType : class, ObserverType, Lock {
|
||||
func _synchronized_on(event: Event<E>)
|
||||
func _synchronized_on(_ event: Event<E>)
|
||||
}
|
||||
|
||||
extension SynchronizedOnType {
|
||||
func synchronizedOn(event: Event<E>) {
|
||||
func synchronizedOn(_ event: Event<E>) {
|
||||
lock(); defer { unlock() }
|
||||
_synchronized_on(event: event)
|
||||
_synchronized_on(event)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,12 +9,12 @@
|
|||
import Foundation
|
||||
|
||||
protocol SynchronizedSubscribeType : class, ObservableType, Lock {
|
||||
func _synchronized_subscribe<O: ObserverType where O.E == E>(observer: O) -> Disposable
|
||||
func _synchronized_subscribe<O: ObserverType where O.E == E>(_ observer: O) -> Disposable
|
||||
}
|
||||
|
||||
extension SynchronizedSubscribeType {
|
||||
func synchronizedSubscribe<O: ObserverType where O.E == E>(observer: O) -> Disposable {
|
||||
func synchronizedSubscribe<O: ObserverType where O.E == E>(_ observer: O) -> Disposable {
|
||||
lock(); defer { unlock() }
|
||||
return _synchronized_subscribe(observer: observer)
|
||||
return _synchronized_subscribe(observer)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,5 +11,5 @@ import Foundation
|
|||
protocol SynchronizedUnsubscribeType : class {
|
||||
associatedtype DisposeKey
|
||||
|
||||
func synchronizedUnsubscribe(disposeKey: DisposeKey)
|
||||
}
|
||||
func synchronizedUnsubscribe(_ disposeKey: DisposeKey)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ class Identity {
|
|||
var _forceAllocation: Int32 = 0
|
||||
}
|
||||
|
||||
func hash(_x: Int) -> Int {
|
||||
func hash(_ _x: Int) -> Int {
|
||||
var x = _x
|
||||
x = ((x >> 16) ^ x) &* 0x45d9f3b
|
||||
x = ((x >> 16) ^ x) &* 0x45d9f3b
|
||||
|
|
@ -36,10 +36,10 @@ public struct BagKey : Hashable {
|
|||
|
||||
public var hashValue: Int {
|
||||
if let uniqueIdentity = uniqueIdentity {
|
||||
return hash(_x: key) ^ (unsafeAddress(of: uniqueIdentity).hashValue)
|
||||
return hash(key) ^ (unsafeAddress(of: uniqueIdentity).hashValue)
|
||||
}
|
||||
else {
|
||||
return hash(_x: key)
|
||||
return hash(key)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -102,7 +102,7 @@ public struct Bag<T> : CustomDebugStringConvertible {
|
|||
- parameter element: Element to insert.
|
||||
- returns: Key that can be used to remove element from bag.
|
||||
*/
|
||||
public mutating func insert(element: T) -> BagKey {
|
||||
public mutating func insert(_ element: T) -> BagKey {
|
||||
_nextKey = _nextKey &+ 1
|
||||
|
||||
#if DEBUG
|
||||
|
|
@ -174,7 +174,7 @@ public struct Bag<T> : CustomDebugStringConvertible {
|
|||
- parameter key: Key that identifies element to remove from bag.
|
||||
- returns: Element that bag contained, or nil in case element was already removed.
|
||||
*/
|
||||
public mutating func removeKey(key: BagKey) -> T? {
|
||||
public mutating func removeKey(_ key: BagKey) -> T? {
|
||||
if _key0 == key {
|
||||
_key0 = nil
|
||||
let value = _value0!
|
||||
|
|
@ -223,7 +223,7 @@ extension Bag {
|
|||
|
||||
- parameter action: Enumeration closure.
|
||||
*/
|
||||
public func forEach(action: @noescape (T) -> Void) {
|
||||
public func forEach(_ action: @noescape (T) -> Void) {
|
||||
if _onlyFastPath {
|
||||
if let value0 = _value0 {
|
||||
action(value0)
|
||||
|
|
@ -262,9 +262,9 @@ extension Bag where T: ObserverType {
|
|||
|
||||
- parameter action: Enumeration closure.
|
||||
*/
|
||||
public func on(event: Event<T.E>) {
|
||||
public func on(_ event: Event<T.E>) {
|
||||
if _onlyFastPath {
|
||||
_value0?.on(event: event)
|
||||
_value0?.on(event)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -274,20 +274,20 @@ extension Bag where T: ObserverType {
|
|||
let dictionary = _dictionary
|
||||
|
||||
if let value0 = value0 {
|
||||
value0.on(event: event)
|
||||
value0.on(event)
|
||||
}
|
||||
|
||||
if let value1 = value1 {
|
||||
value1.on(event: event)
|
||||
value1.on(event)
|
||||
}
|
||||
|
||||
for i in 0 ..< pairs.count {
|
||||
pairs[i].value.on(event: event)
|
||||
pairs[i].value.on(event)
|
||||
}
|
||||
|
||||
if dictionary?.count ?? 0 > 0 {
|
||||
for element in dictionary!.values {
|
||||
element.on(event: event)
|
||||
element.on(event)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -296,7 +296,7 @@ extension Bag where T: ObserverType {
|
|||
/**
|
||||
Dispatches `dispose` to all disposables contained inside bag.
|
||||
*/
|
||||
public func disposeAllIn(bag: Bag<Disposable>) {
|
||||
public func disposeAllIn(_ bag: Bag<Disposable>) {
|
||||
if bag._onlyFastPath {
|
||||
bag._value0?.dispose()
|
||||
return
|
||||
|
|
|
|||
|
|
@ -16,9 +16,9 @@ struct PriorityQueue<Element: AnyObject> {
|
|||
_hasHigherPriority = hasHigherPriority
|
||||
}
|
||||
|
||||
mutating func enqueue(element: Element) {
|
||||
mutating func enqueue(_ element: Element) {
|
||||
_elements.append(element)
|
||||
bubbleToHigherPriority(initialUnbalancedIndex: _elements.count - 1)
|
||||
bubbleToHigherPriority(_elements.count - 1)
|
||||
}
|
||||
|
||||
func peek() -> Element? {
|
||||
|
|
@ -34,21 +34,21 @@ struct PriorityQueue<Element: AnyObject> {
|
|||
return nil
|
||||
}
|
||||
|
||||
removeAt(index: 0)
|
||||
removeAt(0)
|
||||
|
||||
return front
|
||||
}
|
||||
|
||||
mutating func remove(element: Element) {
|
||||
mutating func remove(_ element: Element) {
|
||||
for i in 0 ..< _elements.count {
|
||||
if _elements[i] === element {
|
||||
removeAt(index: i)
|
||||
removeAt(i)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private mutating func removeAt(index: Int) {
|
||||
private mutating func removeAt(_ index: Int) {
|
||||
let removingLast = index == _elements.count - 1
|
||||
if !removingLast {
|
||||
swap(&_elements[index], &_elements[_elements.count - 1])
|
||||
|
|
@ -57,12 +57,12 @@ struct PriorityQueue<Element: AnyObject> {
|
|||
_ = _elements.popLast()
|
||||
|
||||
if !removingLast {
|
||||
bubbleToHigherPriority(initialUnbalancedIndex: index)
|
||||
bubbleToLowerPriority(initialUnbalancedIndex: index)
|
||||
bubbleToHigherPriority(index)
|
||||
bubbleToLowerPriority(index)
|
||||
}
|
||||
}
|
||||
|
||||
private mutating func bubbleToHigherPriority(initialUnbalancedIndex: Int) {
|
||||
private mutating func bubbleToHigherPriority(_ initialUnbalancedIndex: Int) {
|
||||
precondition(initialUnbalancedIndex >= 0)
|
||||
precondition(initialUnbalancedIndex < _elements.count)
|
||||
|
||||
|
|
@ -82,7 +82,7 @@ struct PriorityQueue<Element: AnyObject> {
|
|||
}
|
||||
}
|
||||
|
||||
private mutating func bubbleToLowerPriority(initialUnbalancedIndex: Int) {
|
||||
private mutating func bubbleToLowerPriority(_ initialUnbalancedIndex: Int) {
|
||||
precondition(initialUnbalancedIndex >= 0)
|
||||
precondition(initialUnbalancedIndex < _elements.count)
|
||||
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ public struct Queue<T>: Sequence {
|
|||
return _storage[dequeueIndex]!
|
||||
}
|
||||
|
||||
mutating private func resizeTo(size: Int) {
|
||||
mutating private func resizeTo(_ size: Int) {
|
||||
var newStorage = ContiguousArray<T?>(repeating: nil, count: size)
|
||||
|
||||
let count = _count
|
||||
|
|
@ -94,9 +94,9 @@ public struct Queue<T>: Sequence {
|
|||
|
||||
- parameter element: Element to enqueue.
|
||||
*/
|
||||
public mutating func enqueue(element: T) {
|
||||
public mutating func enqueue(_ element: T) {
|
||||
if count == _storage.count {
|
||||
resizeTo(size: Swift.max(_storage.count, 1) * _resizeFactor)
|
||||
resizeTo(Swift.max(_storage.count, 1) * _resizeFactor)
|
||||
}
|
||||
|
||||
_storage[_pushNextIndex] = element
|
||||
|
|
@ -134,7 +134,7 @@ public struct Queue<T>: Sequence {
|
|||
defer {
|
||||
let downsizeLimit = _storage.count / (_resizeFactor * _resizeFactor)
|
||||
if _count < downsizeLimit && downsizeLimit >= _initialCapacity {
|
||||
resizeTo(size: _storage.count / _resizeFactor)
|
||||
resizeTo(_storage.count / _resizeFactor)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,8 +32,8 @@ public class CompositeDisposable : DisposeBase, Disposable, Cancelable {
|
|||
*/
|
||||
public init(_ disposable1: Disposable, _ disposable2: Disposable) {
|
||||
// This overload is here to make sure we are using optimized version up to 4 arguments.
|
||||
_disposables!.insert(disposable1)
|
||||
_disposables!.insert(disposable2)
|
||||
let _ = _disposables!.insert(disposable1)
|
||||
let _ = _disposables!.insert(disposable2)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -41,9 +41,9 @@ public class CompositeDisposable : DisposeBase, Disposable, Cancelable {
|
|||
*/
|
||||
public init(_ disposable1: Disposable, _ disposable2: Disposable, _ disposable3: Disposable) {
|
||||
// This overload is here to make sure we are using optimized version up to 4 arguments.
|
||||
_disposables!.insert(disposable1)
|
||||
_disposables!.insert(disposable2)
|
||||
_disposables!.insert(disposable3)
|
||||
let _ = _disposables!.insert(disposable1)
|
||||
let _ = _disposables!.insert(disposable2)
|
||||
let _ = _disposables!.insert(disposable3)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -51,13 +51,13 @@ public class CompositeDisposable : DisposeBase, Disposable, Cancelable {
|
|||
*/
|
||||
public init(_ disposable1: Disposable, _ disposable2: Disposable, _ disposable3: Disposable, _ disposable4: Disposable, _ disposables: Disposable...) {
|
||||
// This overload is here to make sure we are using optimized version up to 4 arguments.
|
||||
_disposables!.insert(disposable1)
|
||||
_disposables!.insert(disposable2)
|
||||
_disposables!.insert(disposable3)
|
||||
_disposables!.insert(disposable4)
|
||||
let _ = _disposables!.insert(disposable1)
|
||||
let _ = _disposables!.insert(disposable2)
|
||||
let _ = _disposables!.insert(disposable3)
|
||||
let _ = _disposables!.insert(disposable4)
|
||||
|
||||
for disposable in disposables {
|
||||
_disposables!.insert(disposable)
|
||||
let _ = _disposables!.insert(disposable)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -66,7 +66,7 @@ public class CompositeDisposable : DisposeBase, Disposable, Cancelable {
|
|||
*/
|
||||
public init(disposables: [Disposable]) {
|
||||
for disposable in disposables {
|
||||
_disposables!.insert(disposable)
|
||||
let _ = _disposables!.insert(disposable)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -77,7 +77,7 @@ public class CompositeDisposable : DisposeBase, Disposable, Cancelable {
|
|||
- returns: Key that can be used to remove disposable from composite disposable. In case dispose bag was already
|
||||
disposed `nil` will be returned.
|
||||
*/
|
||||
public func addDisposable(disposable: Disposable) -> DisposeKey? {
|
||||
public func addDisposable(_ disposable: Disposable) -> DisposeKey? {
|
||||
let key = _addDisposable(disposable)
|
||||
|
||||
if key == nil {
|
||||
|
|
@ -87,7 +87,7 @@ public class CompositeDisposable : DisposeBase, Disposable, Cancelable {
|
|||
return key
|
||||
}
|
||||
|
||||
private func _addDisposable(disposable: Disposable) -> DisposeKey? {
|
||||
private func _addDisposable(_ disposable: Disposable) -> DisposeKey? {
|
||||
_lock.lock(); defer { _lock.unlock() }
|
||||
|
||||
return _disposables?.insert(disposable)
|
||||
|
|
@ -106,11 +106,11 @@ public class CompositeDisposable : DisposeBase, Disposable, Cancelable {
|
|||
|
||||
- parameter disposeKey: Key used to identify disposable to be removed.
|
||||
*/
|
||||
public func removeDisposable(disposeKey: DisposeKey) {
|
||||
public func removeDisposable(_ disposeKey: DisposeKey) {
|
||||
_removeDisposable(disposeKey)?.dispose()
|
||||
}
|
||||
|
||||
private func _removeDisposable(disposeKey: DisposeKey) -> Disposable? {
|
||||
private func _removeDisposable(_ disposeKey: DisposeKey) -> Disposable? {
|
||||
_lock.lock(); defer { _lock.unlock() }
|
||||
return _disposables?.removeKey(disposeKey)
|
||||
}
|
||||
|
|
@ -132,4 +132,4 @@ public class CompositeDisposable : DisposeBase, Disposable, Cancelable {
|
|||
|
||||
return disposeBag
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,8 +14,8 @@ extension Disposable {
|
|||
|
||||
- parameter bag: `DisposeBag` to add `self` to.
|
||||
*/
|
||||
public func addDisposableTo(bag: DisposeBag) {
|
||||
bag.addDisposable(disposable: self)
|
||||
public func addDisposableTo(_ bag: DisposeBag) {
|
||||
bag.addDisposable(self)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -51,11 +51,11 @@ public class DisposeBag: DisposeBase {
|
|||
|
||||
- parameter disposable: Disposable to add.
|
||||
*/
|
||||
public func addDisposable(disposable: Disposable) {
|
||||
_addDisposable(disposable: disposable)?.dispose()
|
||||
public func addDisposable(_ disposable: Disposable) {
|
||||
_addDisposable(disposable)?.dispose()
|
||||
}
|
||||
|
||||
private func _addDisposable(disposable: Disposable) -> Disposable? {
|
||||
private func _addDisposable(_ disposable: Disposable) -> Disposable? {
|
||||
_lock.lock(); defer { _lock.unlock() }
|
||||
if _disposed {
|
||||
return disposable
|
||||
|
|
@ -91,4 +91,4 @@ public class DisposeBag: DisposeBase {
|
|||
deinit {
|
||||
dispose()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,13 +14,13 @@ Base class for all disposables.
|
|||
public class DisposeBase {
|
||||
init() {
|
||||
#if TRACE_RESOURCES
|
||||
AtomicIncrement(&resourceCount)
|
||||
let _ = AtomicIncrement(&resourceCount)
|
||||
#endif
|
||||
}
|
||||
|
||||
deinit {
|
||||
#if TRACE_RESOURCES
|
||||
AtomicDecrement(&resourceCount)
|
||||
let _ = AtomicDecrement(&resourceCount)
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ public class RefCountDisposable : DisposeBase, Cancelable {
|
|||
if let _ = _disposable {
|
||||
|
||||
do {
|
||||
try incrementChecked(i: &_count)
|
||||
let _ = try incrementChecked(&_count)
|
||||
} catch (_) {
|
||||
rxFatalError("RefCountDisposable increment failed")
|
||||
}
|
||||
|
|
@ -83,7 +83,7 @@ public class RefCountDisposable : DisposeBase, Cancelable {
|
|||
let oldDisposable: Disposable? = _lock.calculateLocked {
|
||||
if let oldDisposable = _disposable {
|
||||
do {
|
||||
try decrementChecked(i: &_count)
|
||||
let _ = try decrementChecked(&_count)
|
||||
} catch (_) {
|
||||
rxFatalError("RefCountDisposable decrement on release failed")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ public class ScheduledDisposable : Cancelable {
|
|||
Disposes the wrapped disposable on the provided scheduler.
|
||||
*/
|
||||
public func dispose() {
|
||||
scheduler.schedule(state: self, action: disposeScheduledDisposable)
|
||||
let _ = scheduler.schedule(self, action: disposeScheduledDisposable)
|
||||
}
|
||||
|
||||
func disposeInner() {
|
||||
|
|
|
|||
|
|
@ -46,11 +46,11 @@ public class SingleAssignmentDisposable : DisposeBase, Disposable, Cancelable {
|
|||
return _disposable ?? NopDisposable.instance
|
||||
}
|
||||
set {
|
||||
_setDisposable(newValue: newValue)?.dispose()
|
||||
_setDisposable(newValue)?.dispose()
|
||||
}
|
||||
}
|
||||
|
||||
private func _setDisposable(newValue: Disposable) -> Disposable? {
|
||||
private func _setDisposable(_ newValue: Disposable) -> Disposable? {
|
||||
_lock.lock(); defer { _lock.unlock() }
|
||||
if _disposableSet {
|
||||
rxFatalError("oldState.disposable != nil")
|
||||
|
|
|
|||
|
|
@ -18,6 +18,6 @@ struct SubscriptionDisposable<T: SynchronizedUnsubscribeType> : Disposable {
|
|||
}
|
||||
|
||||
func dispose() {
|
||||
_owner?.synchronizedUnsubscribe(disposeKey: _key)
|
||||
_owner?.synchronizedUnsubscribe(_key)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,31 +20,31 @@ public enum RxError
|
|||
/**
|
||||
Unknown error occured.
|
||||
*/
|
||||
case Unknown
|
||||
case unknown
|
||||
/**
|
||||
Performing an action on disposed object.
|
||||
*/
|
||||
case Disposed(object: AnyObject)
|
||||
case disposed(object: AnyObject)
|
||||
/**
|
||||
Aritmetic overflow error.
|
||||
*/
|
||||
case Overflow
|
||||
case overflow
|
||||
/**
|
||||
Argument out of range error.
|
||||
*/
|
||||
case ArgumentOutOfRange
|
||||
case argumentOutOfRange
|
||||
/**
|
||||
Sequence doesn't contain any elements.
|
||||
*/
|
||||
case NoElements
|
||||
case noElements
|
||||
/**
|
||||
Sequence contains more than one element.
|
||||
*/
|
||||
case MoreThanOneElement
|
||||
case moreThanOneElement
|
||||
/**
|
||||
Timeout error.
|
||||
*/
|
||||
case Timeout
|
||||
case timeout
|
||||
}
|
||||
|
||||
public extension RxError {
|
||||
|
|
@ -53,20 +53,20 @@ public extension RxError {
|
|||
*/
|
||||
public var debugDescription: String {
|
||||
switch self {
|
||||
case .Unknown:
|
||||
case .unknown:
|
||||
return "Unknown error occured."
|
||||
case .Disposed(let object):
|
||||
case .disposed(let object):
|
||||
return "Object `\(object)` was already disposed."
|
||||
case .Overflow:
|
||||
case .overflow:
|
||||
return "Arithmetic overflow occured."
|
||||
case .ArgumentOutOfRange:
|
||||
case .argumentOutOfRange:
|
||||
return "Argument out of range."
|
||||
case .NoElements:
|
||||
case .noElements:
|
||||
return "Sequence doesn't contain any elements."
|
||||
case .MoreThanOneElement:
|
||||
case .moreThanOneElement:
|
||||
return "Sequence contains more than one element."
|
||||
case .Timeout:
|
||||
case .timeout:
|
||||
return "Sequence timeout."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,24 +16,24 @@ Next\* (Error | Completed)
|
|||
*/
|
||||
public enum Event<Element> {
|
||||
/// Next element is produced.
|
||||
case Next(Element)
|
||||
case next(Element)
|
||||
|
||||
/// Sequence terminated with an error.
|
||||
case Error(ErrorType)
|
||||
case error(ErrorProtocol)
|
||||
|
||||
/// Sequence completed successfully.
|
||||
case Completed
|
||||
case completed
|
||||
}
|
||||
|
||||
extension Event : CustomDebugStringConvertible {
|
||||
/// - returns: Description of event.
|
||||
public var debugDescription: String {
|
||||
switch self {
|
||||
case .Next(let value):
|
||||
case .next(let value):
|
||||
return "Next(\(value))"
|
||||
case .Error(let error):
|
||||
case .error(let error):
|
||||
return "Error(\(error))"
|
||||
case .Completed:
|
||||
case .completed:
|
||||
return "Completed"
|
||||
}
|
||||
}
|
||||
|
|
@ -43,22 +43,22 @@ extension Event {
|
|||
/// - returns: Is `Completed` or `Error` event.
|
||||
public var isStopEvent: Bool {
|
||||
switch self {
|
||||
case .Next: return false
|
||||
case .Error, .Completed: return true
|
||||
case .next: return false
|
||||
case .error, .completed: return true
|
||||
}
|
||||
}
|
||||
|
||||
/// - returns: If `Next` event, returns element value.
|
||||
public var element: Element? {
|
||||
if case .Next(let value) = self {
|
||||
if case .next(let value) = self {
|
||||
return value
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
/// - returns: If `Error` event, returns error.
|
||||
public var error: ErrorType? {
|
||||
if case .Error(let error) = self {
|
||||
public var error: ErrorProtocol? {
|
||||
if case .error(let error) = self {
|
||||
return error
|
||||
}
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -12,10 +12,10 @@ extension String {
|
|||
/**
|
||||
This is needed because on Linux Swift doesn't have `rangeOfString(..., options: .BackwardsSearch)`
|
||||
*/
|
||||
func lastIndexOf(character: Character) -> Index? {
|
||||
func lastIndexOf(_ character: Character) -> Index? {
|
||||
var index = endIndex
|
||||
while index > startIndex {
|
||||
index = index.predecessor()
|
||||
index = self.index(before: index)
|
||||
if self[index] == character {
|
||||
return index
|
||||
}
|
||||
|
|
@ -23,4 +23,4 @@ extension String {
|
|||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ public protocol ImmediateSchedulerType {
|
|||
- parameter action: Action to be executed.
|
||||
- returns: The disposable object used to cancel the scheduled action (best effort).
|
||||
*/
|
||||
func schedule<StateType>(state: StateType, action: (StateType) -> Disposable) -> Disposable
|
||||
func schedule<StateType>(_ state: StateType, action: (StateType) -> Disposable) -> Disposable
|
||||
}
|
||||
|
||||
extension ImmediateSchedulerType {
|
||||
|
|
@ -30,10 +30,10 @@ extension ImmediateSchedulerType {
|
|||
- parameter action: Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in recursive invocation state.
|
||||
- returns: The disposable object used to cancel the scheduled action (best effort).
|
||||
*/
|
||||
public func scheduleRecursive<State>(state: State, action: (state: State, recurse: (State) -> ()) -> ()) -> Disposable {
|
||||
public func scheduleRecursive<State>(_ state: State, action: (state: State, recurse: (State) -> ()) -> ()) -> Disposable {
|
||||
let recursiveScheduler = RecursiveImmediateScheduler(action: action, scheduler: self)
|
||||
|
||||
recursiveScheduler.schedule(state: state)
|
||||
recursiveScheduler.schedule(state)
|
||||
|
||||
return AnonymousDisposable(recursiveScheduler.dispose)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,12 +16,12 @@ extension ObservableType {
|
|||
- returns: Subscription object used to unsubscribe from the observable sequence.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.ud")
|
||||
public func subscribe(on: (event: Event<E>) -> Void)
|
||||
public func subscribe(_ on: (event: Event<E>) -> Void)
|
||||
-> Disposable {
|
||||
let observer = AnonymousObserver { e in
|
||||
on(event: e)
|
||||
}
|
||||
return self.subscribeSafe(observer: observer)
|
||||
return self.subscribeSafe(observer)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -35,7 +35,7 @@ extension ObservableType {
|
|||
- returns: Subscription object used to unsubscribe from the observable sequence.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.ud")
|
||||
public func subscribe(onNext: ((E) -> Void)? = nil, onError: ((ErrorProtocol) -> Void)? = nil, onCompleted: (() -> Void)? = nil, onDisposed: (() -> Void)? = nil)
|
||||
public func subscribe(_ onNext: ((E) -> Void)? = nil, onError: ((ErrorProtocol) -> Void)? = nil, onCompleted: (() -> Void)? = nil, onDisposed: (() -> Void)? = nil)
|
||||
-> Disposable {
|
||||
|
||||
let disposable: Disposable
|
||||
|
|
@ -49,18 +49,18 @@ extension ObservableType {
|
|||
|
||||
let observer = AnonymousObserver<E> { e in
|
||||
switch e {
|
||||
case .Next(let value):
|
||||
case .next(let value):
|
||||
onNext?(value)
|
||||
case .Error(let e):
|
||||
case .error(let e):
|
||||
onError?(e)
|
||||
disposable.dispose()
|
||||
case .Completed:
|
||||
case .completed:
|
||||
onCompleted?()
|
||||
disposable.dispose()
|
||||
}
|
||||
}
|
||||
return BinaryDisposable(
|
||||
self.subscribeSafe(observer: observer),
|
||||
self.subscribeSafe(observer),
|
||||
disposable
|
||||
)
|
||||
}
|
||||
|
|
@ -72,14 +72,14 @@ extension ObservableType {
|
|||
- returns: Subscription object used to unsubscribe from the observable sequence.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.ud")
|
||||
public func subscribeNext(onNext: (E) -> Void)
|
||||
public func subscribeNext(_ onNext: (E) -> Void)
|
||||
-> Disposable {
|
||||
let observer = AnonymousObserver<E> { e in
|
||||
if case .Next(let value) = e {
|
||||
if case .next(let value) = e {
|
||||
onNext(value)
|
||||
}
|
||||
}
|
||||
return self.subscribeSafe(observer: observer)
|
||||
return self.subscribeSafe(observer)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -89,14 +89,14 @@ extension ObservableType {
|
|||
- returns: Subscription object used to unsubscribe from the observable sequence.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.ud")
|
||||
public func subscribeError(onError: (ErrorProtocol) -> Void)
|
||||
public func subscribeError(_ onError: (ErrorProtocol) -> Void)
|
||||
-> Disposable {
|
||||
let observer = AnonymousObserver<E> { e in
|
||||
if case .Error(let error) = e {
|
||||
if case .error(let error) = e {
|
||||
onError(error)
|
||||
}
|
||||
}
|
||||
return self.subscribeSafe(observer: observer)
|
||||
return self.subscribeSafe(observer)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -106,14 +106,14 @@ extension ObservableType {
|
|||
- returns: Subscription object used to unsubscribe from the observable sequence.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.ud")
|
||||
public func subscribeCompleted(onCompleted: () -> Void)
|
||||
public func subscribeCompleted(_ onCompleted: () -> Void)
|
||||
-> Disposable {
|
||||
let observer = AnonymousObserver<E> { e in
|
||||
if case .Completed = e {
|
||||
if case .completed = e {
|
||||
onCompleted()
|
||||
}
|
||||
}
|
||||
return self.subscribeSafe(observer: observer)
|
||||
return self.subscribeSafe(observer)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -122,7 +122,7 @@ public extension ObservableType {
|
|||
All internal subscribe calls go through this method.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.ud")
|
||||
func subscribeSafe<O: ObserverType where O.E == E>(observer: O) -> Disposable {
|
||||
return self.asObservable().subscribe(observer: observer)
|
||||
func subscribeSafe<O: ObserverType where O.E == E>(_ observer: O) -> Disposable {
|
||||
return self.asObservable().subscribe(observer)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ public class Observable<Element> : ObservableType {
|
|||
#endif
|
||||
}
|
||||
|
||||
public func subscribe<O: ObserverType where O.E == E>(observer: O) -> Disposable {
|
||||
public func subscribe<O: ObserverType where O.E == E>(_ observer: O) -> Disposable {
|
||||
abstractMethod()
|
||||
}
|
||||
|
||||
|
|
@ -35,7 +35,7 @@ public class Observable<Element> : ObservableType {
|
|||
|
||||
deinit {
|
||||
#if TRACE_RESOURCES
|
||||
AtomicDecrement(&resourceCount)
|
||||
let _ = AtomicDecrement(&resourceCount)
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
@ -45,7 +45,7 @@ public class Observable<Element> : ObservableType {
|
|||
/**
|
||||
Optimizations for map operator
|
||||
*/
|
||||
internal func composeMap<R>(selector: (Element) throws -> R) -> Observable<R> {
|
||||
internal func composeMap<R>(_ selector: (Element) throws -> R) -> Observable<R> {
|
||||
return Map(source: self, selector: selector)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ public protocol ObservableType : ObservableConvertibleType {
|
|||
- returns: Subscription for `observer` that can be used to cancel production of sequence elements and free resources.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.ud")
|
||||
func subscribe<O: ObserverType where O.E == E>(observer: O) -> Disposable
|
||||
func subscribe<O: ObserverType where O.E == E>(_ observer: O) -> Disposable
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -50,12 +50,12 @@ extension ObservableType {
|
|||
/**
|
||||
Default implementation of converting `ObservableType` to `Observable`.
|
||||
*/
|
||||
@warn_unused_result(message: "http://git.io/rxs.uo")
|
||||
@warn_unused_result(message:"http://git.io/rxs.uo")
|
||||
public func asObservable() -> Observable<E> {
|
||||
// temporary workaround
|
||||
//return Observable.create(subscribe: self.subscribe)
|
||||
return Observable.create { o in
|
||||
return self.subscribe(observer: o)
|
||||
return self.subscribe(o)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,12 +15,12 @@ class AddRefSink<O: ObserverType> : Sink<O>, ObserverType {
|
|||
super.init(observer: observer)
|
||||
}
|
||||
|
||||
func on(event: Event<Element>) {
|
||||
func on(_ event: Event<Element>) {
|
||||
switch event {
|
||||
case .Next(_):
|
||||
forwardOn(event: event)
|
||||
case .Completed, .Error(_):
|
||||
forwardOn(event: event)
|
||||
case .next(_):
|
||||
forwardOn(event)
|
||||
case .completed, .error(_):
|
||||
forwardOn(event)
|
||||
dispose()
|
||||
}
|
||||
}
|
||||
|
|
@ -37,11 +37,11 @@ class AddRef<Element> : Producer<Element> {
|
|||
_refCount = refCount
|
||||
}
|
||||
|
||||
override func run<O: ObserverType where O.E == Element>(observer: O) -> Disposable {
|
||||
override func run<O: ObserverType where O.E == Element>(_ observer: O) -> Disposable {
|
||||
let releaseDisposable = _refCount.retain()
|
||||
let sink = AddRefSink(observer: observer)
|
||||
sink.disposable = StableCompositeDisposable.create(releaseDisposable, _source.subscribeSafe(observer: sink))
|
||||
sink.disposable = StableCompositeDisposable.create(releaseDisposable, _source.subscribeSafe(sink))
|
||||
|
||||
return sink
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,9 +9,9 @@
|
|||
import Foundation
|
||||
|
||||
enum AmbState {
|
||||
case Neither
|
||||
case Left
|
||||
case Right
|
||||
case neither
|
||||
case left
|
||||
case right
|
||||
}
|
||||
|
||||
class AmbObserver<ElementType, O: ObserverType where O.E == ElementType> : ObserverType {
|
||||
|
|
@ -26,7 +26,7 @@ class AmbObserver<ElementType, O: ObserverType where O.E == ElementType> : Obser
|
|||
|
||||
init(parent: Parent, cancel: Disposable, sink: Sink) {
|
||||
#if TRACE_RESOURCES
|
||||
AtomicIncrement(&resourceCount)
|
||||
let _ = AtomicIncrement(&resourceCount)
|
||||
#endif
|
||||
|
||||
_parent = parent
|
||||
|
|
@ -34,7 +34,7 @@ class AmbObserver<ElementType, O: ObserverType where O.E == ElementType> : Obser
|
|||
_cancel = cancel
|
||||
}
|
||||
|
||||
func on(event: Event<Element>) {
|
||||
func on(_ event: Event<Element>) {
|
||||
_sink(self, event)
|
||||
if event.isStopEvent {
|
||||
_cancel.dispose()
|
||||
|
|
@ -43,7 +43,7 @@ class AmbObserver<ElementType, O: ObserverType where O.E == ElementType> : Obser
|
|||
|
||||
deinit {
|
||||
#if TRACE_RESOURCES
|
||||
AtomicDecrement(&resourceCount)
|
||||
let _ = AtomicDecrement(&resourceCount)
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
@ -54,9 +54,9 @@ class AmbSink<ElementType, O: ObserverType where O.E == ElementType> : Sink<O> {
|
|||
|
||||
private let _parent: Parent
|
||||
|
||||
private let _lock = NSRecursiveLock()
|
||||
private let _lock = RecursiveLock()
|
||||
// state
|
||||
private var _choice = AmbState.Neither
|
||||
private var _choice = AmbState.neither
|
||||
|
||||
init(parent: Parent, observer: O) {
|
||||
_parent = parent
|
||||
|
|
@ -69,12 +69,12 @@ class AmbSink<ElementType, O: ObserverType where O.E == ElementType> : Sink<O> {
|
|||
let disposeAll = StableCompositeDisposable.create(subscription1, subscription2)
|
||||
|
||||
let forwardEvent = { (o: AmbObserverType, event: Event<ElementType>) -> Void in
|
||||
self.forwardOn(event: event)
|
||||
self.forwardOn(event)
|
||||
}
|
||||
|
||||
let decide = { (o: AmbObserverType, event: Event<ElementType>, me: AmbState, otherSubscription: Disposable) in
|
||||
self._lock.performLocked {
|
||||
if self._choice == .Neither {
|
||||
if self._choice == .neither {
|
||||
self._choice = me
|
||||
o._sink = forwardEvent
|
||||
o._cancel = disposeAll
|
||||
|
|
@ -82,7 +82,7 @@ class AmbSink<ElementType, O: ObserverType where O.E == ElementType> : Sink<O> {
|
|||
}
|
||||
|
||||
if self._choice == me {
|
||||
self.forwardOn(event: event)
|
||||
self.forwardOn(event)
|
||||
if event.isStopEvent {
|
||||
self.dispose()
|
||||
}
|
||||
|
|
@ -91,15 +91,15 @@ class AmbSink<ElementType, O: ObserverType where O.E == ElementType> : Sink<O> {
|
|||
}
|
||||
|
||||
let sink1 = AmbObserver(parent: self, cancel: subscription1) { o, e in
|
||||
decide(o, e, .Left, subscription2)
|
||||
decide(o, e, .left, subscription2)
|
||||
}
|
||||
|
||||
let sink2 = AmbObserver(parent: self, cancel: subscription1) { o, e in
|
||||
decide(o, e, .Right, subscription1)
|
||||
decide(o, e, .right, subscription1)
|
||||
}
|
||||
|
||||
subscription1.disposable = _parent._left.subscribe(observer: sink1)
|
||||
subscription2.disposable = _parent._right.subscribe(observer: sink2)
|
||||
subscription1.disposable = _parent._left.subscribe(sink1)
|
||||
subscription2.disposable = _parent._right.subscribe(sink2)
|
||||
|
||||
return disposeAll
|
||||
}
|
||||
|
|
@ -114,9 +114,9 @@ class Amb<Element>: Producer<Element> {
|
|||
_right = right
|
||||
}
|
||||
|
||||
override func run<O : ObserverType where O.E == Element>(observer: O) -> Disposable {
|
||||
override func run<O : ObserverType where O.E == Element>(_ observer: O) -> Disposable {
|
||||
let sink = AmbSink(parent: self, observer: observer)
|
||||
sink.disposable = sink.run()
|
||||
return sink
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,22 +19,22 @@ class AnonymousObservableSink<O: ObserverType> : Sink<O>, ObserverType {
|
|||
super.init(observer: observer)
|
||||
}
|
||||
|
||||
func on(event: Event<E>) {
|
||||
func on(_ event: Event<E>) {
|
||||
switch event {
|
||||
case .Next:
|
||||
case .next:
|
||||
if _isStopped == 1 {
|
||||
return
|
||||
}
|
||||
forwardOn(event: event)
|
||||
case .Error, .Completed:
|
||||
forwardOn(event)
|
||||
case .error, .completed:
|
||||
if AtomicCompareAndSwap(0, 1, &_isStopped) {
|
||||
forwardOn(event: event)
|
||||
forwardOn(event)
|
||||
dispose()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func run(parent: Parent) -> Disposable {
|
||||
func run(_ parent: Parent) -> Disposable {
|
||||
return parent._subscribeHandler(AnyObserver(self))
|
||||
}
|
||||
}
|
||||
|
|
@ -48,9 +48,9 @@ class AnonymousObservable<Element> : Producer<Element> {
|
|||
_subscribeHandler = subscribeHandler
|
||||
}
|
||||
|
||||
override func run<O : ObserverType where O.E == Element>(observer: O) -> Disposable {
|
||||
override func run<O : ObserverType where O.E == Element>(_ observer: O) -> Disposable {
|
||||
let sink = AnonymousObservableSink(observer: observer)
|
||||
sink.disposable = sink.run(parent: self)
|
||||
sink.disposable = sink.run(self)
|
||||
return sink
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ class BufferTimeCount<Element> : Producer<[Element]> {
|
|||
_scheduler = scheduler
|
||||
}
|
||||
|
||||
override func run<O : ObserverType where O.E == [Element]>(observer: O) -> Disposable {
|
||||
override func run<O : ObserverType where O.E == [Element]>(_ observer: O) -> Disposable {
|
||||
let sink = BufferTimeCountSink(parent: self, observer: observer)
|
||||
sink.disposable = sink.run()
|
||||
return sink
|
||||
|
|
@ -39,7 +39,7 @@ class BufferTimeCountSink<Element, O: ObserverType where O.E == [Element]>
|
|||
|
||||
private let _parent: Parent
|
||||
|
||||
let _lock = NSRecursiveLock()
|
||||
let _lock = RecursiveLock()
|
||||
|
||||
// state
|
||||
private let _timerD = SerialDisposable()
|
||||
|
|
@ -52,8 +52,8 @@ class BufferTimeCountSink<Element, O: ObserverType where O.E == [Element]>
|
|||
}
|
||||
|
||||
func run() -> Disposable {
|
||||
createTimer(windowID: _windowID)
|
||||
return StableCompositeDisposable.create(_timerD, _parent._source.subscribe(observer: self))
|
||||
createTimer(_windowID)
|
||||
return StableCompositeDisposable.create(_timerD, _parent._source.subscribe(self))
|
||||
}
|
||||
|
||||
func startNewWindowAndSendCurrentOne() {
|
||||
|
|
@ -62,36 +62,36 @@ class BufferTimeCountSink<Element, O: ObserverType where O.E == [Element]>
|
|||
|
||||
let buffer = _buffer
|
||||
_buffer = []
|
||||
forwardOn(event: .Next(buffer))
|
||||
forwardOn(.next(buffer))
|
||||
|
||||
createTimer(windowID: windowID)
|
||||
createTimer(windowID)
|
||||
}
|
||||
|
||||
func on(event: Event<E>) {
|
||||
synchronizedOn(event: event)
|
||||
func on(_ event: Event<E>) {
|
||||
synchronizedOn(event)
|
||||
}
|
||||
|
||||
func _synchronized_on(event: Event<E>) {
|
||||
func _synchronized_on(_ event: Event<E>) {
|
||||
switch event {
|
||||
case .Next(let element):
|
||||
case .next(let element):
|
||||
_buffer.append(element)
|
||||
|
||||
if _buffer.count == _parent._count {
|
||||
startNewWindowAndSendCurrentOne()
|
||||
}
|
||||
|
||||
case .Error(let error):
|
||||
case .error(let error):
|
||||
_buffer = []
|
||||
forwardOn(event: .Error(error))
|
||||
forwardOn(.error(error))
|
||||
dispose()
|
||||
case .Completed:
|
||||
forwardOn(event: .Next(_buffer))
|
||||
forwardOn(event: .Completed)
|
||||
case .completed:
|
||||
forwardOn(.next(_buffer))
|
||||
forwardOn(.completed)
|
||||
dispose()
|
||||
}
|
||||
}
|
||||
|
||||
func createTimer(windowID: Int) {
|
||||
func createTimer(_ windowID: Int) {
|
||||
if _timerD.disposed {
|
||||
return
|
||||
}
|
||||
|
|
@ -104,7 +104,7 @@ class BufferTimeCountSink<Element, O: ObserverType where O.E == [Element]>
|
|||
|
||||
_timerD.disposable = nextTimer
|
||||
|
||||
nextTimer.disposable = _parent._scheduler.scheduleRelative(state: windowID, dueTime: _parent._timeSpan) { previousWindowID in
|
||||
nextTimer.disposable = _parent._scheduler.scheduleRelative(windowID, dueTime: _parent._timeSpan) { previousWindowID in
|
||||
self._lock.performLocked {
|
||||
if previousWindowID != self._windowID {
|
||||
return
|
||||
|
|
@ -116,4 +116,4 @@ class BufferTimeCountSink<Element, O: ObserverType where O.E == [Element]>
|
|||
return NopDisposable.instance
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,13 +20,13 @@ class CatchSinkProxy<O: ObserverType> : ObserverType {
|
|||
_parent = parent
|
||||
}
|
||||
|
||||
func on(event: Event<E>) {
|
||||
_parent.forwardOn(event: event)
|
||||
func on(_ event: Event<E>) {
|
||||
_parent.forwardOn(event)
|
||||
|
||||
switch event {
|
||||
case .Next:
|
||||
case .next:
|
||||
break
|
||||
case .Error, .Completed:
|
||||
case .error, .completed:
|
||||
_parent.dispose()
|
||||
}
|
||||
}
|
||||
|
|
@ -47,28 +47,28 @@ class CatchSink<O: ObserverType> : Sink<O>, ObserverType {
|
|||
func run() -> Disposable {
|
||||
let d1 = SingleAssignmentDisposable()
|
||||
_subscription.disposable = d1
|
||||
d1.disposable = _parent._source.subscribe(observer: self)
|
||||
d1.disposable = _parent._source.subscribe(self)
|
||||
|
||||
return _subscription
|
||||
}
|
||||
|
||||
func on(event: Event<E>) {
|
||||
func on(_ event: Event<E>) {
|
||||
switch event {
|
||||
case .Next:
|
||||
forwardOn(event: event)
|
||||
case .Completed:
|
||||
forwardOn(event: event)
|
||||
case .next:
|
||||
forwardOn(event)
|
||||
case .completed:
|
||||
forwardOn(event)
|
||||
dispose()
|
||||
case .Error(let error):
|
||||
case .error(let error):
|
||||
do {
|
||||
let catchSequence = try _parent._handler(error)
|
||||
|
||||
let observer = CatchSinkProxy(parent: self)
|
||||
|
||||
_subscription.disposable = catchSequence.subscribe(observer: observer)
|
||||
_subscription.disposable = catchSequence.subscribe(observer)
|
||||
}
|
||||
catch let e {
|
||||
forwardOn(event: .Error(e))
|
||||
forwardOn(.error(e))
|
||||
dispose()
|
||||
}
|
||||
}
|
||||
|
|
@ -86,7 +86,7 @@ class Catch<Element> : Producer<Element> {
|
|||
_handler = handler
|
||||
}
|
||||
|
||||
override func run<O: ObserverType where O.E == Element>(observer: O) -> Disposable {
|
||||
override func run<O: ObserverType where O.E == Element>(_ observer: O) -> Disposable {
|
||||
let sink = CatchSink(parent: self, observer: observer)
|
||||
sink.disposable = sink.run()
|
||||
return sink
|
||||
|
|
@ -107,35 +107,35 @@ class CatchSequenceSink<S: Sequence, O: ObserverType where S.Iterator.Element :
|
|||
super.init(observer: observer)
|
||||
}
|
||||
|
||||
func on(event: Event<Element>) {
|
||||
func on(_ event: Event<Element>) {
|
||||
switch event {
|
||||
case .Next:
|
||||
forwardOn(event: event)
|
||||
case .Error(let error):
|
||||
case .next:
|
||||
forwardOn(event)
|
||||
case .error(let error):
|
||||
_lastError = error
|
||||
schedule(command: .MoveNext)
|
||||
case .Completed:
|
||||
forwardOn(event: event)
|
||||
schedule(.moveNext)
|
||||
case .completed:
|
||||
forwardOn(event)
|
||||
dispose()
|
||||
}
|
||||
}
|
||||
|
||||
override func subscribeToNext(source: Observable<E>) -> Disposable {
|
||||
return source.subscribe(observer: self)
|
||||
override func subscribeToNext(_ source: Observable<E>) -> Disposable {
|
||||
return source.subscribe(self)
|
||||
}
|
||||
|
||||
override func done() {
|
||||
if let lastError = _lastError {
|
||||
forwardOn(event: .Error(lastError))
|
||||
forwardOn(.error(lastError))
|
||||
}
|
||||
else {
|
||||
forwardOn(event: .Completed)
|
||||
forwardOn(.completed)
|
||||
}
|
||||
|
||||
self.dispose()
|
||||
}
|
||||
|
||||
override func extract(observable: Observable<Element>) -> SequenceGenerator? {
|
||||
override func extract(_ observable: Observable<Element>) -> SequenceGenerator? {
|
||||
if let onError = observable as? CatchSequence<S> {
|
||||
return (onError.sources.makeIterator(), nil)
|
||||
}
|
||||
|
|
@ -154,9 +154,9 @@ class CatchSequence<S: Sequence where S.Iterator.Element : ObservableConvertible
|
|||
self.sources = sources
|
||||
}
|
||||
|
||||
override func run<O : ObserverType where O.E == Element>(observer: O) -> Disposable {
|
||||
override func run<O : ObserverType where O.E == Element>(_ observer: O) -> Disposable {
|
||||
let sink = CatchSequenceSink<S, O>(observer: observer)
|
||||
sink.disposable = sink.run(sources: (self.sources.makeIterator(), nil))
|
||||
sink.disposable = sink.run((self.sources.makeIterator(), nil))
|
||||
return sink
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ class CombineLatestCollectionTypeSink<C: Collection, R, O: ObserverType where C.
|
|||
|
||||
let _parent: Parent
|
||||
|
||||
let _lock = NSRecursiveLock()
|
||||
let _lock = RecursiveLock()
|
||||
|
||||
// state
|
||||
var _numberOfValues = 0
|
||||
|
|
@ -38,10 +38,10 @@ class CombineLatestCollectionTypeSink<C: Collection, R, O: ObserverType where C.
|
|||
super.init(observer: observer)
|
||||
}
|
||||
|
||||
func on(event: Event<SourceElement>, atIndex: Int) {
|
||||
func on(_ event: Event<SourceElement>, atIndex: Int) {
|
||||
_lock.lock(); defer { _lock.unlock() } // {
|
||||
switch event {
|
||||
case .Next(let element):
|
||||
case .next(let element):
|
||||
if _values[atIndex] == nil {
|
||||
_numberOfValues += 1
|
||||
}
|
||||
|
|
@ -51,7 +51,7 @@ class CombineLatestCollectionTypeSink<C: Collection, R, O: ObserverType where C.
|
|||
if _numberOfValues < _parent._count {
|
||||
let numberOfOthersThatAreDone = self._numberOfDone - (_isDone[atIndex] ? 1 : 0)
|
||||
if numberOfOthersThatAreDone == self._parent._count - 1 {
|
||||
forwardOn(event: .Completed)
|
||||
forwardOn(.completed)
|
||||
dispose()
|
||||
}
|
||||
return
|
||||
|
|
@ -59,17 +59,17 @@ class CombineLatestCollectionTypeSink<C: Collection, R, O: ObserverType where C.
|
|||
|
||||
do {
|
||||
let result = try _parent._resultSelector(_values.map { $0! })
|
||||
forwardOn(event: .Next(result))
|
||||
forwardOn(.next(result))
|
||||
}
|
||||
catch let error {
|
||||
forwardOn(event: .Error(error))
|
||||
forwardOn(.error(error))
|
||||
dispose()
|
||||
}
|
||||
|
||||
case .Error(let error):
|
||||
forwardOn(event: .Error(error))
|
||||
case .error(let error):
|
||||
forwardOn(.error(error))
|
||||
dispose()
|
||||
case .Completed:
|
||||
case .completed:
|
||||
if _isDone[atIndex] {
|
||||
return
|
||||
}
|
||||
|
|
@ -78,7 +78,7 @@ class CombineLatestCollectionTypeSink<C: Collection, R, O: ObserverType where C.
|
|||
_numberOfDone += 1
|
||||
|
||||
if _numberOfDone == self._parent._count {
|
||||
forwardOn(event: .Completed)
|
||||
forwardOn(.completed)
|
||||
dispose()
|
||||
}
|
||||
else {
|
||||
|
|
@ -93,8 +93,8 @@ class CombineLatestCollectionTypeSink<C: Collection, R, O: ObserverType where C.
|
|||
for i in _parent._sources {
|
||||
let index = j
|
||||
let source = i.asObservable()
|
||||
_subscriptions[j].disposable = source.subscribe(observer: AnyObserver { event in
|
||||
self.on(event: event, atIndex: index)
|
||||
_subscriptions[j].disposable = source.subscribe(AnyObserver { event in
|
||||
self.on(event, atIndex: index)
|
||||
})
|
||||
|
||||
j += 1
|
||||
|
|
@ -117,9 +117,9 @@ class CombineLatestCollectionType<C: Collection, R where C.Iterator.Element : Ob
|
|||
_count = Int(self._sources.count.toIntMax())
|
||||
}
|
||||
|
||||
override func run<O : ObserverType where O.E == R>(observer: O) -> Disposable {
|
||||
override func run<O : ObserverType where O.E == R>(_ observer: O) -> Disposable {
|
||||
let sink = CombineLatestCollectionTypeSink(parent: self, observer: observer)
|
||||
sink.disposable = sink.run()
|
||||
return sink
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue