diff --git a/Rx.playground/SupportCode.remap b/Rx.playground/SupportCode.remap index a7e12062..6a635fd4 100644 --- a/Rx.playground/SupportCode.remap +++ b/Rx.playground/SupportCode.remap @@ -1,22 +1,12 @@ [ { - "file": "/Users/kzaher/Projects/RxSwift/Rx.playground/Sources/SupportCode.swift", - "offset": 245, - "text": "_ ", + "file": "/Users/mo/Documents/OpenSource/RxSwift/Rx.playground/Sources/SupportCode.swift", + "offset": 276, + "remove": 9, }, { - "file": "/Users/kzaher/Projects/RxSwift/Rx.playground/Sources/SupportCode.swift", - "offset": 335, - "remove": 13, - }, - { - "file": "/Users/kzaher/Projects/RxSwift/Rx.playground/Sources/SupportCode.swift", - "offset": 397, - "text": "_ ", - }, - { - "file": "/Users/kzaher/Projects/RxSwift/Rx.playground/Sources/SupportCode.swift", - "offset": 714, - "text": "_ ", + "file": "/Users/mo/Documents/OpenSource/RxSwift/Rx.playground/Sources/SupportCode.swift", + "offset": 733, + "text": "@escaping ", } ] diff --git a/RxBlocking/BlockingObservable+Operators.swift b/RxBlocking/BlockingObservable+Operators.swift index 3df54e5e..b8ee3506 100644 --- a/RxBlocking/BlockingObservable+Operators.swift +++ b/RxBlocking/BlockingObservable+Operators.swift @@ -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: @escaping (E) throws -> Bool) throws -> E? { var element: E? var error: Swift.Error? diff --git a/RxBlocking/RunLoopLock.swift b/RxBlocking/RunLoopLock.swift index 6112ae88..dd802fa1 100644 --- a/RxBlocking/RunLoopLock.swift +++ b/RxBlocking/RunLoopLock.swift @@ -38,7 +38,7 @@ class RunLoopLock { currentRunLoop = CFRunLoopGetCurrent() } - func dispatch(_ action: () -> ()) { + func dispatch(_ action: @escaping () -> ()) { CFRunLoopPerformBlock(currentRunLoop, CFRunLoopMode.defaultMode.rawValue) { if CurrentThreadScheduler.isScheduleRequired { _ = CurrentThreadScheduler.instance.schedule(()) { _ in diff --git a/RxCocoa/Common/CocoaUnits/ControlEvent.swift b/RxCocoa/Common/CocoaUnits/ControlEvent.swift index a92b0170..3202ad1d 100644 --- a/RxCocoa/Common/CocoaUnits/ControlEvent.swift +++ b/RxCocoa/Common/CocoaUnits/ControlEvent.swift @@ -54,7 +54,7 @@ public struct ControlEvent : ControlEventType { - parameter events: Observable sequence that represents events. - returns: Control event created with a observable sequence of events. */ - public init(events: Ev) { + public init(events: Ev) where Ev.E == E { _events = events.subscribeOn(ConcurrentMainScheduler.instance) } @@ -64,7 +64,7 @@ public struct ControlEvent : 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(_ observer: O) -> Disposable { + public func subscribe(_ observer: O) -> Disposable where O.E == E { return _events.subscribe(observer) } diff --git a/RxCocoa/Common/CocoaUnits/ControlProperty.swift b/RxCocoa/Common/CocoaUnits/ControlProperty.swift index e6223913..bc4e7515 100644 --- a/RxCocoa/Common/CocoaUnits/ControlProperty.swift +++ b/RxCocoa/Common/CocoaUnits/ControlProperty.swift @@ -59,7 +59,7 @@ public struct ControlProperty : ControlPropertyType { - returns: Control property created with a observable sequence of values and an observer that enables binding values to property. */ - public init(values: V, valueSink: S) { + public init(values: V, valueSink: S) where E == V.E, E == S.E { _values = values.subscribeOn(ConcurrentMainScheduler.instance) _valueSink = valueSink.asObserver() } @@ -70,7 +70,7 @@ public struct ControlProperty : 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(_ observer: O) -> Disposable { + public func subscribe(_ observer: O) -> Disposable where O.E == E { return _values.subscribe(observer) } diff --git a/RxCocoa/Common/CocoaUnits/Driver/Driver+Operators.swift b/RxCocoa/Common/CocoaUnits/Driver/Driver+Operators.swift index bbd49aa5..f734929e 100644 --- a/RxCocoa/Common/CocoaUnits/Driver/Driver+Operators.swift +++ b/RxCocoa/Common/CocoaUnits/Driver/Driver+Operators.swift @@ -250,7 +250,7 @@ extension DriverConvertibleType { - 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 { + public func distinctUntilChanged(_ comparer: (E, E) -> Bool) -> Driver { let source = self.asObservable() .distinctUntilChanged({ $0 }, comparer: comparer) return Driver(source) @@ -264,7 +264,7 @@ extension DriverConvertibleType { - 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(_ keySelector: (E) -> K, comparer: (lhs: K, rhs: K) -> Bool) -> Driver { + public func distinctUntilChanged(_ keySelector: (E) -> K, comparer: (K, K) -> Bool) -> Driver { let source = self.asObservable() .distinctUntilChanged(keySelector, comparer: comparer) return Driver(source) @@ -406,7 +406,7 @@ extension Collection where Iterator.Element : DriverConvertibleType { // @warn_unused_result(message:"http://git.io/rxs.uo") public func concat() -> Driver { - let source = self.map { $0.asDriver().asObservable() }.concat() + let source = self.map { $0.asDriver().asObservable() } as (_) -> _.concat() return Driver(source) } } diff --git a/RxCocoa/Common/CocoaUnits/Driver/Driver+Subscription.swift b/RxCocoa/Common/CocoaUnits/Driver/Driver+Subscription.swift index e62982b6..3539dc2a 100644 --- a/RxCocoa/Common/CocoaUnits/Driver/Driver+Subscription.swift +++ b/RxCocoa/Common/CocoaUnits/Driver/Driver+Subscription.swift @@ -25,7 +25,7 @@ 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(_ observer: O) -> Disposable { + public func drive(_ observer: O) -> Disposable where O.E == E { MainScheduler.ensureExecutingOnScheduler(errorMessage: driverErrorMessage) return self.asObservable().subscribe(observer) } diff --git a/RxCocoa/Common/CocoaUnits/Driver/Driver.swift b/RxCocoa/Common/CocoaUnits/Driver/Driver.swift index 67a82d97..2c2ae098 100644 --- a/RxCocoa/Common/CocoaUnits/Driver/Driver.swift +++ b/RxCocoa/Common/CocoaUnits/Driver/Driver.swift @@ -130,7 +130,7 @@ extension Driver { - 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) + public static func deferred(_ observableFactory: @escaping () -> Driver) -> Driver { return Driver(Observable.deferred { observableFactory().asObservable() }) } diff --git a/RxCocoa/Common/CocoaUnits/Driver/ObservableConvertibleType+Driver.swift b/RxCocoa/Common/CocoaUnits/Driver/ObservableConvertibleType+Driver.swift index 455bdff1..72897403 100644 --- a/RxCocoa/Common/CocoaUnits/Driver/ObservableConvertibleType+Driver.swift +++ b/RxCocoa/Common/CocoaUnits/Driver/ObservableConvertibleType+Driver.swift @@ -51,7 +51,7 @@ extension ObservableConvertibleType { - returns: Driving observable sequence. */ // @warn_unused_result(message:"http://git.io/rxs.uo") - public func asDriver(onErrorRecover: (error: Swift.Error) -> Driver) -> Driver { + public func asDriver(onErrorRecover: (_ error: Swift.Error) -> Driver) -> Driver { let source = self .asObservable() .observeOn(driverObserveOnScheduler) diff --git a/RxCocoa/Common/CocoaUnits/UIBindingObserver.swift b/RxCocoa/Common/CocoaUnits/UIBindingObserver.swift index 236aee89..90f4d02e 100644 --- a/RxCocoa/Common/CocoaUnits/UIBindingObserver.swift +++ b/RxCocoa/Common/CocoaUnits/UIBindingObserver.swift @@ -18,7 +18,7 @@ Observer that enforces interface binding rules: `UIBindingObserver` doesn't retain target interface and in case owned interface element is released, element isn't bound. */ -public class UIBindingObserver : ObserverType { +open class UIBindingObserver : ObserverType where UIElementType: AnyObject { public typealias E = Value weak var UIElement: UIElementType? @@ -36,7 +36,7 @@ public class UIBindingObserver) { + open func on(_ event: Event) { MainScheduler.ensureExecutingOnScheduler(errorMessage: "Element can be bound to user interface only on MainThread.") switch event { @@ -56,7 +56,7 @@ public class UIBindingObserver AnyObserver { + open func asObserver() -> AnyObserver { return AnyObserver(eventHandler: on) } } diff --git a/RxCocoa/Common/DelegateProxy.swift b/RxCocoa/Common/DelegateProxy.swift index b1b22a9a..155b548d 100644 --- a/RxCocoa/Common/DelegateProxy.swift +++ b/RxCocoa/Common/DelegateProxy.swift @@ -19,7 +19,7 @@ Base class for `DelegateProxyType` protocol. This implementation is not thread safe and can be used only from one thread (Main thread). */ -public class DelegateProxy : _RXDelegateProxy { +open class DelegateProxy : _RXDelegateProxy { private var subjectsForSelector = [Selector: PublishSubject<[AnyObject]>]() @@ -85,7 +85,7 @@ 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]> { + open 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.") } @@ -108,7 +108,7 @@ public class DelegateProxy : _RXDelegateProxy { // proxy - public override func interceptedSelector(_ selector: Selector, withArguments arguments: [AnyObject]!) { + open override func interceptedSelector(_ selector: Selector, withArguments arguments: [AnyObject]!) { subjectsForSelector[selector]?.on(.next(arguments)) } @@ -117,7 +117,7 @@ public class DelegateProxy : _RXDelegateProxy { - returns: Associated object tag. */ - public class func delegateAssociatedObjectTag() -> UnsafePointer { + open class func delegateAssociatedObjectTag() -> UnsafeRawPointer { return _pointer(&delegateAssociatedTag) } @@ -126,7 +126,7 @@ public class DelegateProxy : _RXDelegateProxy { - returns: Initialized instance of `self`. */ - public class func createProxyForObject(_ object: AnyObject) -> AnyObject { + open 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? { + open class func assignedProxyFor(_ object: AnyObject) -> AnyObject? { let maybeDelegate: AnyObject? = objc_getAssociatedObject(object, self.delegateAssociatedObjectTag()) return castOptionalOrFatalError(maybeDelegate) } @@ -147,7 +147,7 @@ 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) { + open class func assignProxy(_ proxy: AnyObject, toObject object: AnyObject) { precondition(proxy.isKind(of: self.classForCoder())) objc_setAssociatedObject(object, self.delegateAssociatedObjectTag(), proxy, .OBJC_ASSOCIATION_RETAIN) @@ -160,7 +160,7 @@ public class DelegateProxy : _RXDelegateProxy { - parameter forwardToDelegate: Reference of delegate that receives all messages through `self`. - parameter retainDelegate: Should `self` retain `forwardToDelegate`. */ - public func setForwardToDelegate(_ delegate: AnyObject?, retainDelegate: Bool) { + open func setForwardToDelegate(_ delegate: AnyObject?, retainDelegate: Bool) { self._setForward(toDelegate: delegate, retainDelegate: retainDelegate) } @@ -170,7 +170,7 @@ public class DelegateProxy : _RXDelegateProxy { - returns: Value of reference if set or nil. */ - public func forwardToDelegate() -> AnyObject? { + open func forwardToDelegate() -> AnyObject? { return self._forwardToDelegate } @@ -185,7 +185,7 @@ public class DelegateProxy : _RXDelegateProxy { // MARK: Pointer - class func _pointer(_ p: UnsafePointer) -> UnsafePointer { + class func _pointer(_ p: UnsafeRawPointer) -> UnsafeRawPointer { return p } } diff --git a/RxCocoa/Common/Observable+Bind.swift b/RxCocoa/Common/Observable+Bind.swift index 0c7db3b7..c58f4733 100644 --- a/RxCocoa/Common/Observable+Bind.swift +++ b/RxCocoa/Common/Observable+Bind.swift @@ -23,7 +23,7 @@ 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(_ observer: O) -> Disposable { + public func bindTo(_ observer: O) -> Disposable where O.E == E { return self.subscribe(observer) } diff --git a/RxCocoa/Common/Observables/Implementations/KVOObservable.swift b/RxCocoa/Common/Observables/Implementations/KVOObservable.swift index 16d55bb9..4ad4b706 100644 --- a/RxCocoa/Common/Observables/Implementations/KVOObservable.swift +++ b/RxCocoa/Common/Observables/Implementations/KVOObservable.swift @@ -33,7 +33,7 @@ class KVOObservable } } - func subscribe(_ observer: O) -> Disposable { + func subscribe(_ observer: O) -> Disposable where O.E == Element? { let observer = KVOObserver(parent: self) { (value) in if value as? NSNull != nil { observer.on(.next(nil)) diff --git a/RxCocoa/Common/Observables/NSObject+Rx.swift b/RxCocoa/Common/Observables/NSObject+Rx.swift index 3539aa3b..cf6a5ff1 100644 --- a/RxCocoa/Common/Observables/NSObject+Rx.swift +++ b/RxCocoa/Common/Observables/NSObject+Rx.swift @@ -212,7 +212,7 @@ let rxDeallocatingSelector = RX_selector(deallocSelector) let rxDeallocatingSelectorReference = RX_reference_from_selector(rxDeallocatingSelector) extension NSObject { - func rx_synchronized( _ action: @noescape() -> T) -> T { + func rx_synchronized(_ action: () -> T) -> T { objc_sync_enter(self) let result = action() objc_sync_exit(self) @@ -225,7 +225,7 @@ 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(_ key: UnsafePointer, createCachedObservable: () -> T) -> T { + func rx_lazyInstanceObservable(_ key: UnsafeRawPointer, createCachedObservable: () -> T) -> T { if let value = objc_getAssociatedObject(self, key) { return value as! T } diff --git a/RxCocoa/Common/RxCocoa.swift b/RxCocoa/Common/RxCocoa.swift index 28ba7add..0e1a37cc 100644 --- a/RxCocoa/Common/RxCocoa.swift +++ b/RxCocoa/Common/RxCocoa.swift @@ -230,11 +230,11 @@ func bindingErrorToInterface(_ error: Swift.Error) { // MARK: Abstract methods -@noreturn func rxAbstractMethodWithMessage(_ message: String) { +func rxAbstractMethodWithMessage(_ message: String) -> Never { rxFatalError(message) } -@noreturn func rxAbstractMethod() { +func rxAbstractMethod() -> Never { rxFatalError("Abstract method") } @@ -337,7 +337,7 @@ extension Error { #if !RX_NO_MODULE -@noreturn func rxFatalError(_ lastMessage: String) { +func rxFatalError(_ lastMessage: String) -> Never { // The temptation to comment this line is great, but please don't, it's for your own good. The choice is yours. fatalError(lastMessage) } diff --git a/RxCocoa/Common/RxTarget.swift b/RxCocoa/Common/RxTarget.swift index f9fe14c3..62ce0691 100644 --- a/RxCocoa/Common/RxTarget.swift +++ b/RxCocoa/Common/RxTarget.swift @@ -41,4 +41,4 @@ class RxTarget : NSObject OSAtomicDecrement32(&resourceCount) } #endif -} \ No newline at end of file +} diff --git a/RxCocoa/iOS/DataSources/RxCollectionViewReactiveArrayDataSource.swift b/RxCocoa/iOS/DataSources/RxCollectionViewReactiveArrayDataSource.swift index 1cdebccb..ffa635e6 100644 --- a/RxCocoa/iOS/DataSources/RxCollectionViewReactiveArrayDataSource.swift +++ b/RxCocoa/iOS/DataSources/RxCollectionViewReactiveArrayDataSource.swift @@ -32,7 +32,7 @@ class _RxCollectionViewReactiveArrayDataSource return _collectionView(collectionView, numberOfItemsInSection: section) } - private func _collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + fileprivate func _collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { rxAbstractMethod() } diff --git a/RxCocoa/iOS/DataSources/RxTableViewReactiveArrayDataSource.swift b/RxCocoa/iOS/DataSources/RxTableViewReactiveArrayDataSource.swift index f3cf1937..37bba0a1 100644 --- a/RxCocoa/iOS/DataSources/RxTableViewReactiveArrayDataSource.swift +++ b/RxCocoa/iOS/DataSources/RxTableViewReactiveArrayDataSource.swift @@ -31,7 +31,7 @@ class _RxTableViewReactiveArrayDataSource return _tableView(tableView, numberOfRowsInSection: section) } - private func _tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + fileprivate func _tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { rxAbstractMethod() } diff --git a/RxCocoa/iOS/Proxies/RxCollectionViewDataSourceProxy.swift b/RxCocoa/iOS/Proxies/RxCollectionViewDataSourceProxy.swift index e34c20db..3a3a47cb 100644 --- a/RxCocoa/iOS/Proxies/RxCollectionViewDataSourceProxy.swift +++ b/RxCocoa/iOS/Proxies/RxCollectionViewDataSourceProxy.swift @@ -35,7 +35,7 @@ class CollectionViewDataSourceNotSet /** For more information take a look at `DelegateProxyType`. */ -public class RxCollectionViewDataSourceProxy +open class RxCollectionViewDataSourceProxy : DelegateProxy , UICollectionViewDataSource , DelegateProxyType { @@ -43,7 +43,7 @@ public class RxCollectionViewDataSourceProxy /** Typed parent object. */ - public weak private(set) var collectionView: UICollectionView? + open weak private(set) var collectionView: UICollectionView? private weak var _requiredMethodsDataSource: UICollectionViewDataSource? = collectionViewDataSourceNotSet @@ -62,14 +62,14 @@ public class RxCollectionViewDataSourceProxy /** Required delegate method implementation. */ - public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + open func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return (_requiredMethodsDataSource ?? collectionViewDataSourceNotSet).collectionView(collectionView, numberOfItemsInSection: section) ?? 0 } /** Required delegate method implementation. */ - public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + open func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { return (_requiredMethodsDataSource ?? collectionViewDataSourceNotSet).collectionView(collectionView, cellForItemAt: indexPath) } @@ -78,7 +78,7 @@ public class RxCollectionViewDataSourceProxy /** For more information take a look at `DelegateProxyType`. */ - public override class func createProxyForObject(_ object: AnyObject) -> AnyObject { + open override class func createProxyForObject(_ object: AnyObject) -> AnyObject { let collectionView = (object as! UICollectionView) return castOrFatalError(collectionView.rx_createDataSourceProxy()) @@ -87,14 +87,14 @@ public class RxCollectionViewDataSourceProxy /** For more information take a look at `DelegateProxyType`. */ - public override class func delegateAssociatedObjectTag() -> UnsafePointer { + open override class func delegateAssociatedObjectTag() -> UnsafeRawPointer { return _pointer(&dataSourceAssociatedTag) } /** For more information take a look at `DelegateProxyType`. */ - public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) { + open class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) { let collectionView: UICollectionView = castOrFatalError(object) collectionView.dataSource = castOptionalOrFatalError(delegate) } @@ -102,7 +102,7 @@ public class RxCollectionViewDataSourceProxy /** For more information take a look at `DelegateProxyType`. */ - public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? { + open class func currentDelegateFor(_ object: AnyObject) -> AnyObject? { let collectionView: UICollectionView = castOrFatalError(object) return collectionView.dataSource } @@ -110,7 +110,7 @@ public class RxCollectionViewDataSourceProxy /** For more information take a look at `DelegateProxyType`. */ - public override func setForwardToDelegate(_ forwardToDelegate: AnyObject?, retainDelegate: Bool) { + open override func setForwardToDelegate(_ forwardToDelegate: AnyObject?, retainDelegate: Bool) { let requiredMethodsDataSource: UICollectionViewDataSource? = castOptionalOrFatalError(forwardToDelegate) _requiredMethodsDataSource = requiredMethodsDataSource ?? collectionViewDataSourceNotSet super.setForwardToDelegate(forwardToDelegate, retainDelegate: retainDelegate) diff --git a/RxCocoa/iOS/Proxies/RxCollectionViewDelegateProxy.swift b/RxCocoa/iOS/Proxies/RxCollectionViewDelegateProxy.swift index b2c5933b..d1bd393e 100644 --- a/RxCocoa/iOS/Proxies/RxCollectionViewDelegateProxy.swift +++ b/RxCocoa/iOS/Proxies/RxCollectionViewDelegateProxy.swift @@ -17,7 +17,7 @@ import RxSwift /** For more information take a look at `DelegateProxyType`. */ -public class RxCollectionViewDelegateProxy +open class RxCollectionViewDelegateProxy : RxScrollViewDelegateProxy , UICollectionViewDelegate , UICollectionViewDelegateFlowLayout { @@ -25,7 +25,7 @@ public class RxCollectionViewDelegateProxy /** Typed parent object. */ - public weak private(set) var collectionView: UICollectionView? + open weak private(set) var collectionView: UICollectionView? /** Initializes `RxCollectionViewDelegateProxy` diff --git a/RxCocoa/iOS/Proxies/RxImagePickerDelegateProxy.swift b/RxCocoa/iOS/Proxies/RxImagePickerDelegateProxy.swift index 91f0aaea..c6cdb710 100644 --- a/RxCocoa/iOS/Proxies/RxImagePickerDelegateProxy.swift +++ b/RxCocoa/iOS/Proxies/RxImagePickerDelegateProxy.swift @@ -14,7 +14,7 @@ #endif import UIKit -public class RxImagePickerDelegateProxy +open class RxImagePickerDelegateProxy : DelegateProxy , DelegateProxyType , UIImagePickerControllerDelegate @@ -23,7 +23,7 @@ public class RxImagePickerDelegateProxy /** For more information take a look at `DelegateProxyType`. */ - public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) { + open 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? { + open class func currentDelegateFor(_ object: AnyObject) -> AnyObject? { let imagePickerController: UIImagePickerController = castOrFatalError(object) return imagePickerController.delegate } diff --git a/RxCocoa/iOS/Proxies/RxPickerViewDelegateProxy.swift b/RxCocoa/iOS/Proxies/RxPickerViewDelegateProxy.swift index 29ed3978..aefde483 100644 --- a/RxCocoa/iOS/Proxies/RxPickerViewDelegateProxy.swift +++ b/RxCocoa/iOS/Proxies/RxPickerViewDelegateProxy.swift @@ -14,7 +14,7 @@ #endif import UIKit -public class RxPickerViewDelegateProxy +open class RxPickerViewDelegateProxy : DelegateProxy , DelegateProxyType , UIPickerViewDelegate { @@ -22,7 +22,7 @@ public class RxPickerViewDelegateProxy /** For more information take a look at `DelegateProxyType`. */ - public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) { + open 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? { + open class func currentDelegateFor(_ object: AnyObject) -> AnyObject? { let pickerView: UIPickerView = castOrFatalError(object) return pickerView.delegate } diff --git a/RxCocoa/iOS/Proxies/RxScrollViewDelegateProxy.swift b/RxCocoa/iOS/Proxies/RxScrollViewDelegateProxy.swift index cc8fb600..81d544a5 100644 --- a/RxCocoa/iOS/Proxies/RxScrollViewDelegateProxy.swift +++ b/RxCocoa/iOS/Proxies/RxScrollViewDelegateProxy.swift @@ -17,17 +17,17 @@ import UIKit /** For more information take a look at `DelegateProxyType`. */ -public class RxScrollViewDelegateProxy +open class RxScrollViewDelegateProxy : DelegateProxy , UIScrollViewDelegate , DelegateProxyType { - private var _contentOffsetSubject: ReplaySubject? + fileprivate var _contentOffsetSubject: ReplaySubject? /** Typed parent object. */ - public weak private(set) var scrollView: UIScrollView? + open weak fileprivate(set) var scrollView: UIScrollView? /** Optimized version used for observing content offset changes. @@ -57,7 +57,7 @@ public class RxScrollViewDelegateProxy /** For more information take a look at `DelegateProxyType`. */ - public func scrollViewDidScroll(_ scrollView: UIScrollView) { + open func scrollViewDidScroll(_ scrollView: UIScrollView) { if let contentOffset = _contentOffsetSubject { contentOffset.on(.next(scrollView.contentOffset)) } @@ -69,7 +69,7 @@ public class RxScrollViewDelegateProxy /** For more information take a look at `DelegateProxyType`. */ - public override class func createProxyForObject(_ object: AnyObject) -> AnyObject { + open 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) { + open class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) { let scrollView: UIScrollView = castOrFatalError(object) scrollView.delegate = castOptionalOrFatalError(delegate) } @@ -86,7 +86,7 @@ public class RxScrollViewDelegateProxy /** For more information take a look at `DelegateProxyType`. */ - public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? { + open class func currentDelegateFor(_ object: AnyObject) -> AnyObject? { let scrollView: UIScrollView = castOrFatalError(object) return scrollView.delegate } diff --git a/RxCocoa/iOS/Proxies/RxSearchBarDelegateProxy.swift b/RxCocoa/iOS/Proxies/RxSearchBarDelegateProxy.swift index 330028b0..dd40dda6 100644 --- a/RxCocoa/iOS/Proxies/RxSearchBarDelegateProxy.swift +++ b/RxCocoa/iOS/Proxies/RxSearchBarDelegateProxy.swift @@ -17,7 +17,7 @@ import RxSwift /** For more information take a look at `DelegateProxyType`. */ -public class RxSearchBarDelegateProxy +open class RxSearchBarDelegateProxy : DelegateProxy , UISearchBarDelegate , DelegateProxyType { @@ -25,7 +25,7 @@ public class RxSearchBarDelegateProxy /** For more information take a look at `DelegateProxyType`. */ - public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? { + open 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) { + open 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 { + open override class func createProxyForObject(_ object: AnyObject) -> AnyObject { let searchBar = (object as! UISearchBar) return castOrFatalError(searchBar.rx_createDelegateProxy()) diff --git a/RxCocoa/iOS/Proxies/RxSearchControllerDelegateProxy.swift b/RxCocoa/iOS/Proxies/RxSearchControllerDelegateProxy.swift index 2273fc2e..3f749222 100644 --- a/RxCocoa/iOS/Proxies/RxSearchControllerDelegateProxy.swift +++ b/RxCocoa/iOS/Proxies/RxSearchControllerDelegateProxy.swift @@ -18,7 +18,7 @@ For more information take a look at `DelegateProxyType`. */ @available(iOS 8.0, *) -public class RxSearchControllerDelegateProxy +open class RxSearchControllerDelegateProxy : DelegateProxy , DelegateProxyType , UISearchControllerDelegate { @@ -26,7 +26,7 @@ public class RxSearchControllerDelegateProxy /** For more information take a look at `DelegateProxyType`. */ - public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) { + open 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? { + open class func currentDelegateFor(_ object: AnyObject) -> AnyObject? { let searchController: UISearchController = castOrFatalError(object) return searchController.delegate } diff --git a/RxCocoa/iOS/Proxies/RxTabBarDelegateProxy.swift b/RxCocoa/iOS/Proxies/RxTabBarDelegateProxy.swift index 95103b41..9ec8bd63 100644 --- a/RxCocoa/iOS/Proxies/RxTabBarDelegateProxy.swift +++ b/RxCocoa/iOS/Proxies/RxTabBarDelegateProxy.swift @@ -17,7 +17,7 @@ import RxSwift /** For more information take a look at `DelegateProxyType`. */ -public class RxTabBarDelegateProxy +open class RxTabBarDelegateProxy : DelegateProxy , UITabBarDelegate , DelegateProxyType { @@ -25,7 +25,7 @@ public class RxTabBarDelegateProxy /** For more information take a look at `DelegateProxyType`. */ - public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? { + open class func currentDelegateFor(_ object: AnyObject) -> AnyObject? { let tabBar: UITabBar = castOrFatalError(object) return tabBar.delegate } @@ -33,7 +33,7 @@ public class RxTabBarDelegateProxy /** For more information take a look at `DelegateProxyType`. */ - public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) { + open class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) { let tabBar: UITabBar = castOrFatalError(object) tabBar.delegate = castOptionalOrFatalError(delegate) } @@ -41,7 +41,7 @@ public class RxTabBarDelegateProxy /** For more information take a look at `DelegateProxyType`. */ - public override class func createProxyForObject(_ object: AnyObject) -> AnyObject { + open override class func createProxyForObject(_ object: AnyObject) -> AnyObject { let tabBar = (object as! UITabBar) return castOrFatalError(tabBar.rx_createDelegateProxy()) diff --git a/RxCocoa/iOS/Proxies/RxTableViewDataSourceProxy.swift b/RxCocoa/iOS/Proxies/RxTableViewDataSourceProxy.swift index c7df9a57..9a5f44d5 100644 --- a/RxCocoa/iOS/Proxies/RxTableViewDataSourceProxy.swift +++ b/RxCocoa/iOS/Proxies/RxTableViewDataSourceProxy.swift @@ -32,7 +32,7 @@ class TableViewDataSourceNotSet /** For more information take a look at `DelegateProxyType`. */ -public class RxTableViewDataSourceProxy +open class RxTableViewDataSourceProxy : DelegateProxy , UITableViewDataSource , DelegateProxyType { @@ -40,9 +40,9 @@ public class RxTableViewDataSourceProxy /** Typed parent object. */ - public weak private(set) var tableView: UITableView? + open weak fileprivate(set) var tableView: UITableView? - private weak var _requiredMethodsDataSource: UITableViewDataSource? = tableViewDataSourceNotSet + fileprivate weak var _requiredMethodsDataSource: UITableViewDataSource? = tableViewDataSourceNotSet /** Initializes `RxTableViewDataSourceProxy` @@ -59,14 +59,14 @@ public class RxTableViewDataSourceProxy /** Required delegate method implementation. */ - public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + open func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return (_requiredMethodsDataSource ?? tableViewDataSourceNotSet).tableView(tableView, numberOfRowsInSection: section) } /** Required delegate method implementation. */ - public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + open func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { return (_requiredMethodsDataSource ?? tableViewDataSourceNotSet).tableView(tableView, cellForRowAt: indexPath) } @@ -75,7 +75,7 @@ public class RxTableViewDataSourceProxy /** For more information take a look at `DelegateProxyType`. */ - public override class func createProxyForObject(_ object: AnyObject) -> AnyObject { + open override class func createProxyForObject(_ object: AnyObject) -> AnyObject { let tableView = (object as! UITableView) return castOrFatalError(tableView.rx_createDataSourceProxy()) @@ -84,14 +84,14 @@ public class RxTableViewDataSourceProxy /** For more information take a look at `DelegateProxyType`. */ - public override class func delegateAssociatedObjectTag() -> UnsafePointer { + open override class func delegateAssociatedObjectTag() -> UnsafeRawPointer { return _pointer(&dataSourceAssociatedTag) } /** For more information take a look at `DelegateProxyType`. */ - public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) { + open class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) { let tableView: UITableView = castOrFatalError(object) tableView.dataSource = castOptionalOrFatalError(delegate) } @@ -99,7 +99,7 @@ public class RxTableViewDataSourceProxy /** For more information take a look at `DelegateProxyType`. */ - public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? { + open class func currentDelegateFor(_ object: AnyObject) -> AnyObject? { let tableView: UITableView = castOrFatalError(object) return tableView.dataSource } @@ -107,7 +107,7 @@ public class RxTableViewDataSourceProxy /** For more information take a look at `DelegateProxyType`. */ - public override func setForwardToDelegate(_ forwardToDelegate: AnyObject?, retainDelegate: Bool) { + open override func setForwardToDelegate(_ forwardToDelegate: AnyObject?, retainDelegate: Bool) { let requiredMethodsDataSource: UITableViewDataSource? = castOptionalOrFatalError(forwardToDelegate) _requiredMethodsDataSource = requiredMethodsDataSource ?? tableViewDataSourceNotSet super.setForwardToDelegate(forwardToDelegate, retainDelegate: retainDelegate) diff --git a/RxCocoa/iOS/Proxies/RxTableViewDelegateProxy.swift b/RxCocoa/iOS/Proxies/RxTableViewDelegateProxy.swift index 243f5850..edeb3259 100644 --- a/RxCocoa/iOS/Proxies/RxTableViewDelegateProxy.swift +++ b/RxCocoa/iOS/Proxies/RxTableViewDelegateProxy.swift @@ -17,7 +17,7 @@ import RxSwift /** For more information take a look at `DelegateProxyType`. */ -public class RxTableViewDelegateProxy +open class RxTableViewDelegateProxy : RxScrollViewDelegateProxy , UITableViewDelegate { @@ -25,7 +25,7 @@ public class RxTableViewDelegateProxy /** Typed parent object. */ - public weak private(set) var tableView: UITableView? + open weak private(set) var tableView: UITableView? /** Initializes `RxTableViewDelegateProxy` diff --git a/RxCocoa/iOS/Proxies/RxTextStorageDelegateProxy.swift b/RxCocoa/iOS/Proxies/RxTextStorageDelegateProxy.swift index d546d4cf..62404244 100644 --- a/RxCocoa/iOS/Proxies/RxTextStorageDelegateProxy.swift +++ b/RxCocoa/iOS/Proxies/RxTextStorageDelegateProxy.swift @@ -14,7 +14,7 @@ #endif import UIKit -public class RxTextStorageDelegateProxy +open class RxTextStorageDelegateProxy : DelegateProxy , DelegateProxyType , NSTextStorageDelegate { @@ -23,7 +23,7 @@ public class RxTextStorageDelegateProxy /** For more information take a look at `DelegateProxyType`. */ - public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) { + open 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? { + open class func currentDelegateFor(_ object: AnyObject) -> AnyObject? { let textStorage: NSTextStorage = castOrFatalError(object) return textStorage.delegate } diff --git a/RxCocoa/iOS/Proxies/RxTextViewDelegateProxy.swift b/RxCocoa/iOS/Proxies/RxTextViewDelegateProxy.swift index 3caf7bac..239bb20f 100644 --- a/RxCocoa/iOS/Proxies/RxTextViewDelegateProxy.swift +++ b/RxCocoa/iOS/Proxies/RxTextViewDelegateProxy.swift @@ -17,14 +17,14 @@ import RxSwift /** For more information take a look at `DelegateProxyType`. */ -public class RxTextViewDelegateProxy +open class RxTextViewDelegateProxy : RxScrollViewDelegateProxy , UITextViewDelegate { /** Typed parent object. */ - public weak private(set) var textView: UITextView? + open weak private(set) var textView: UITextView? /** Initializes `RxTextViewDelegateProxy` @@ -41,7 +41,7 @@ public class RxTextViewDelegateProxy /** For more information take a look at `DelegateProxyType`. */ - @objc public func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { + @objc open 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. diff --git a/RxCocoa/iOS/UICollectionView+Rx.swift b/RxCocoa/iOS/UICollectionView+Rx.swift index 1b3faebc..e1d9eb50 100644 --- a/RxCocoa/iOS/UICollectionView+Rx.swift +++ b/RxCocoa/iOS/UICollectionView+Rx.swift @@ -43,10 +43,10 @@ extension UICollectionView { .addDisposableTo(disposeBag) */ @available(*, deprecated, renamed: "rx_items(source:cellFactory:)") - public func rx_itemsWithCellFactory + public func rx_itemsWithCellFactory (_ source: O) - -> (cellFactory: (UICollectionView, Int, S.Iterator.Element) -> UICollectionViewCell) - -> Disposable { + -> (_ cellFactory: (UICollectionView, Int, S.Iterator.Element) -> UICollectionViewCell) + -> Disposable where O.E == S { return { cellFactory in let dataSource = RxCollectionViewReactiveArrayDataSourceSequenceWrapper(cellFactory: cellFactory) return self.rx_itemsWithDataSource(dataSource)(source: source) @@ -78,10 +78,10 @@ extension UICollectionView { } .addDisposableTo(disposeBag) */ - public func rx_items + public func rx_items (source: O) - -> (cellFactory: (UICollectionView, Int, S.Iterator.Element) -> UICollectionViewCell) - -> Disposable { + -> (_ cellFactory: (UICollectionView, Int, S.Iterator.Element) -> UICollectionViewCell) + -> Disposable where O.E == S { return { cellFactory in let dataSource = RxCollectionViewReactiveArrayDataSourceSequenceWrapper(cellFactory: cellFactory) return self.rx_items(dataSource: dataSource)(source: source) @@ -113,11 +113,11 @@ extension UICollectionView { .addDisposableTo(disposeBag) */ @available(*, deprecated, renamed: "rx_items(cellIdentifier:cellType:source:configureCell:)") - public func rx_itemsWithCellIdentifier + public func rx_itemsWithCellIdentifier (_ cellIdentifier: String, cellType: Cell.Type = Cell.self) - -> (source: O) - -> (configureCell: (Int, S.Iterator.Element, Cell) -> Void) - -> Disposable { + -> (_ source: O) + -> (_ configureCell: (Int, S.Iterator.Element, Cell) -> Void) + -> Disposable where O.E == S { return { source in return { configureCell in let dataSource = RxCollectionViewReactiveArrayDataSourceSequenceWrapper { (cv, i, item) in @@ -155,11 +155,11 @@ extension UICollectionView { } .addDisposableTo(disposeBag) */ - public func rx_items + public func rx_items (cellIdentifier: String, cellType: Cell.Type = Cell.self) - -> (source: O) - -> (configureCell: (Int, S.Iterator.Element, Cell) -> Void) - -> Disposable { + -> (_ source: O) + -> (_ configureCell: (Int, S.Iterator.Element, Cell) -> Void) + -> Disposable where O.E == S { return { source in return { configureCell in let dataSource = RxCollectionViewReactiveArrayDataSourceSequenceWrapper { (cv, i, item) in @@ -217,11 +217,11 @@ extension UICollectionView { @available(*, deprecated, renamed: "rx_items(dataSource:source:)") public func rx_itemsWithDataSource< DataSource: RxCollectionViewDataSourceType & UICollectionViewDataSource, - O: ObservableType where DataSource.Element == O.E - > + O: ObservableType> (_ dataSource: DataSource) - -> (source: O) - -> Disposable { + -> (_ source: O) + -> Disposable where DataSource.Element == O.E + { return { source in return source.subscribeProxyDataSource(ofObject: self, dataSource: dataSource, retainDataSource: true) { [weak self] (_: RxCollectionViewDataSourceProxy, event) -> Void in @@ -274,11 +274,11 @@ extension UICollectionView { */ public func rx_items< DataSource: RxCollectionViewDataSourceType & UICollectionViewDataSource, - O: ObservableType where DataSource.Element == O.E - > + O: ObservableType> (dataSource: DataSource) - -> (source: O) - -> Disposable { + -> (_ source: O) + -> Disposable where DataSource.Element == O.E + { return { source in // This is called for sideeffects only, and to make sure delegate proxy is in place when // data source is being bound. diff --git a/RxCocoa/iOS/UIControl+Rx.swift b/RxCocoa/iOS/UIControl+Rx.swift index 8c421bb1..cfc16c9a 100644 --- a/RxCocoa/iOS/UIControl+Rx.swift +++ b/RxCocoa/iOS/UIControl+Rx.swift @@ -63,7 +63,7 @@ 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(_ control: C, getter: (C) -> T, setter: (C, T) -> Void) -> ControlProperty { + static func rx_value(_ control: C, getter: @escaping (C) -> T, setter: (C, T) -> Void) -> ControlProperty { let source: Observable = Observable.create { [weak weakControl = control] observer in guard let control = weakControl else { observer.on(.completed) diff --git a/RxSwift/AnyObserver.swift b/RxSwift/AnyObserver.swift index 770680df..b1fdc157 100644 --- a/RxSwift/AnyObserver.swift +++ b/RxSwift/AnyObserver.swift @@ -40,7 +40,7 @@ public struct AnyObserver : ObserverType { - parameter observer: Observer that receives sequence events. */ - public init(_ observer: O) { + public init(_ observer: O) where O.E == Element { self.observer = observer.on } diff --git a/RxSwift/Concurrency/Lock.swift b/RxSwift/Concurrency/Lock.swift index ca6f3202..5c9a2ae9 100644 --- a/RxSwift/Concurrency/Lock.swift +++ b/RxSwift/Concurrency/Lock.swift @@ -63,17 +63,17 @@ protocol Lock { #endif extension NSRecursiveLock : Lock { - func performLocked( _ action: @noescape() -> Void) { + func performLocked(_ action: () -> Void) { lock(); defer { unlock() } action() } - func calculateLocked( _ action: @noescape() -> T) -> T { + func calculateLocked(_ action: () -> T) -> T { lock(); defer { unlock() } return action() } - func calculateLockedOrFail( _ action: @noescape() throws -> T) throws -> T { + func calculateLockedOrFail(_ action: () throws -> T) throws -> T { lock(); defer { unlock() } let result = try action() return result diff --git a/RxSwift/Concurrency/SynchronizedSubscribeType.swift b/RxSwift/Concurrency/SynchronizedSubscribeType.swift index d45f7953..04fbdad4 100644 --- a/RxSwift/Concurrency/SynchronizedSubscribeType.swift +++ b/RxSwift/Concurrency/SynchronizedSubscribeType.swift @@ -9,11 +9,11 @@ import Foundation protocol SynchronizedSubscribeType : class, ObservableType, Lock { - func _synchronized_subscribe(_ observer: O) -> Disposable + func _synchronized_subscribe(_ observer: O) -> Disposable where O.E == E } extension SynchronizedSubscribeType { - func synchronizedSubscribe(_ observer: O) -> Disposable { + func synchronizedSubscribe(_ observer: O) -> Disposable where O.E == E { lock(); defer { unlock() } return _synchronized_subscribe(observer) } diff --git a/RxSwift/DataStructures/Bag.swift b/RxSwift/DataStructures/Bag.swift index 6b7192f3..3b43f9f2 100644 --- a/RxSwift/DataStructures/Bag.swift +++ b/RxSwift/DataStructures/Bag.swift @@ -66,29 +66,29 @@ public struct Bag : CustomDebugStringConvertible { */ public typealias KeyType = BagKey - private typealias ScopeUniqueTokenType = Int + fileprivate typealias ScopeUniqueTokenType = Int typealias Entry = (key: BagKey, value: T) - private var _uniqueIdentity: Identity? - private var _nextKey: ScopeUniqueTokenType = 0 + fileprivate var _uniqueIdentity: Identity? + fileprivate var _nextKey: ScopeUniqueTokenType = 0 // data // first fill inline variables - private var _key0: BagKey? = nil - private var _value0: T? = nil + fileprivate var _key0: BagKey? = nil + fileprivate var _value0: T? = nil - private var _key1: BagKey? = nil - private var _value1: T? = nil + fileprivate var _key1: BagKey? = nil + fileprivate var _value1: T? = nil // then fill "array dictionary" - private var _pairs = ContiguousArray() + fileprivate var _pairs = ContiguousArray() // last is sparse dictionary - private var _dictionary: [BagKey : T]? = nil + fileprivate var _dictionary: [BagKey : T]? = nil - private var _onlyFastPath = true + fileprivate var _onlyFastPath = true /** Creates new empty `Bag`. @@ -224,7 +224,7 @@ extension Bag { - parameter action: Enumeration closure. */ - public func forEach(_ action: @noescape (T) -> Void) { + public func forEach(_ action: (T) -> Void) { if _onlyFastPath { if let value0 = _value0 { action(value0) diff --git a/RxSwift/DataStructures/InfiniteSequence.swift b/RxSwift/DataStructures/InfiniteSequence.swift index 19345568..a1cce01c 100644 --- a/RxSwift/DataStructures/InfiniteSequence.swift +++ b/RxSwift/DataStructures/InfiniteSequence.swift @@ -27,4 +27,4 @@ struct InfiniteSequence : Sequence { return repeatedValue } } -} \ No newline at end of file +} diff --git a/RxSwift/DataStructures/PriorityQueue.swift b/RxSwift/DataStructures/PriorityQueue.swift index 704e3244..92a4be9f 100644 --- a/RxSwift/DataStructures/PriorityQueue.swift +++ b/RxSwift/DataStructures/PriorityQueue.swift @@ -10,7 +10,7 @@ import Foundation struct PriorityQueue { private let _hasHigherPriority: (Element, Element) -> Bool - private var _elements = [Element]() + fileprivate var _elements = [Element]() init(hasHigherPriority: (Element, Element) -> Bool) { _hasHigherPriority = hasHigherPriority diff --git a/RxSwift/Disposables/AnonymousDisposable.swift b/RxSwift/Disposables/AnonymousDisposable.swift index bf0a48b4..39a05434 100644 --- a/RxSwift/Disposables/AnonymousDisposable.swift +++ b/RxSwift/Disposables/AnonymousDisposable.swift @@ -38,7 +38,7 @@ public final class AnonymousDisposable : DisposeBase, Cancelable { } // Non-deprecated version of the constructor, used by `Disposables.create(with:)` - private init(disposeAction: DisposeAction) { + fileprivate init(disposeAction: DisposeAction) { _disposeAction = disposeAction super.init() } @@ -67,7 +67,7 @@ public extension Disposables { - parameter dispose: Disposal action which will be run upon calling `dispose`. */ - static func create(with dispose: () -> ()) -> Cancelable { + static func create(with dispose: @escaping () -> ()) -> Cancelable { return AnonymousDisposable(disposeAction: dispose) } diff --git a/RxSwift/Disposables/DisposeBase.swift b/RxSwift/Disposables/DisposeBase.swift index 16da27ce..941296dc 100644 --- a/RxSwift/Disposables/DisposeBase.swift +++ b/RxSwift/Disposables/DisposeBase.swift @@ -11,7 +11,7 @@ import Foundation /** Base class for all disposables. */ -public class DisposeBase { +open class DisposeBase { init() { #if TRACE_RESOURCES let _ = AtomicIncrement(&resourceCount) diff --git a/RxSwift/Disposables/RefCountDisposable.swift b/RxSwift/Disposables/RefCountDisposable.swift index b2c22a51..775b0863 100644 --- a/RxSwift/Disposables/RefCountDisposable.swift +++ b/RxSwift/Disposables/RefCountDisposable.swift @@ -79,7 +79,7 @@ public final class RefCountDisposable : DisposeBase, Cancelable { } } - private func release() { + fileprivate func release() { let oldDisposable: Disposable? = _lock.calculateLocked { if let oldDisposable = _disposable { do { diff --git a/RxSwift/Disposables/SingleAssignmentDisposable.swift b/RxSwift/Disposables/SingleAssignmentDisposable.swift index 56f45d70..bf0358e8 100644 --- a/RxSwift/Disposables/SingleAssignmentDisposable.swift +++ b/RxSwift/Disposables/SingleAssignmentDisposable.swift @@ -13,7 +13,7 @@ Represents a disposable resource which only allows a single assignment of its un If an underlying disposable resource has already been set, future attempts to set the underlying disposable resource will throw an exception. */ -public class SingleAssignmentDisposable : DisposeBase, Disposable, Cancelable { +open class SingleAssignmentDisposable : DisposeBase, Disposable, Cancelable { private var _lock = SpinLock() // state @@ -24,7 +24,7 @@ public class SingleAssignmentDisposable : DisposeBase, Disposable, Cancelable { /** - returns: A value that indicates whether the object is disposed. */ - public var isDisposed: Bool { + open var isDisposed: Bool { return _isDisposed } @@ -40,7 +40,7 @@ public class SingleAssignmentDisposable : DisposeBase, Disposable, Cancelable { **Throws exception if the `SingleAssignmentDisposable` has already been assigned to.** */ - public var disposable: Disposable { + open var disposable: Disposable { get { _lock.lock(); defer { _lock.unlock() } return _disposable ?? Disposables.create() @@ -70,7 +70,7 @@ public class SingleAssignmentDisposable : DisposeBase, Disposable, Cancelable { /** Disposes the underlying disposable. */ - public func dispose() { + open func dispose() { if _isDisposed { return } diff --git a/RxSwift/ImmediateSchedulerType.swift b/RxSwift/ImmediateSchedulerType.swift index a12e241d..8371bee5 100644 --- a/RxSwift/ImmediateSchedulerType.swift +++ b/RxSwift/ImmediateSchedulerType.swift @@ -30,7 +30,7 @@ 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, action: (state: State, recurse: (State) -> ()) -> ()) -> Disposable { + public func scheduleRecursive(_ state: State, action: (_ state: State, _ recurse: (State) -> ()) -> ()) -> Disposable { let recursiveScheduler = RecursiveImmediateScheduler(action: action, scheduler: self) recursiveScheduler.schedule(state) diff --git a/RxSwift/Observable.swift b/RxSwift/Observable.swift index 49e7a2a2..2bd61e82 100644 --- a/RxSwift/Observable.swift +++ b/RxSwift/Observable.swift @@ -13,7 +13,7 @@ A type-erased `ObservableType`. It represents a push style sequence. */ -public class Observable : ObservableType { +open class Observable : ObservableType { /** Type of elements in sequence. */ @@ -25,11 +25,11 @@ public class Observable : ObservableType { #endif } - public func subscribe(_ observer: O) -> Disposable { + open func subscribe(_ observer: O) -> Disposable where O.E == E { abstractMethod() } - public func asObservable() -> Observable { + open func asObservable() -> Observable { return self } diff --git a/RxSwift/ObservableType+Extensions.swift b/RxSwift/ObservableType+Extensions.swift index 87f6a3f5..5cb701f5 100644 --- a/RxSwift/ObservableType+Extensions.swift +++ b/RxSwift/ObservableType+Extensions.swift @@ -16,10 +16,10 @@ 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) -> Void) + public func subscribe(_ on: @escaping (Event) -> Void) -> Disposable { let observer = AnonymousObserver { e in - on(event: e) + on(e) } return self.subscribeSafe(observer) } @@ -121,7 +121,7 @@ extension ObservableType { */ // @warn_unused_result(message: "http://git.io/rxs.ud") @available(*, deprecated, renamed: "subscribe(onNext:)") - public func subscribeNext(_ onNext: (E) -> Void) + public func subscribeNext(_ onNext: @escaping (E) -> Void) -> Disposable { let observer = AnonymousObserver { e in if case .next(let value) = e { @@ -139,7 +139,7 @@ extension ObservableType { */ // @warn_unused_result(message: "http://git.io/rxs.ud") @available(*, deprecated, renamed: "subscribe(onError:)") - public func subscribeError(_ onError: (Swift.Error) -> Void) + public func subscribeError(_ onError: @escaping (Swift.Error) -> Void) -> Disposable { let observer = AnonymousObserver { e in if case .error(let error) = e { @@ -157,7 +157,7 @@ extension ObservableType { */ // @warn_unused_result(message: "http://git.io/rxs.ud") @available(*, deprecated, renamed: "subscribe(onCompleted:)") - public func subscribeCompleted(_ onCompleted: () -> Void) + public func subscribeCompleted(_ onCompleted: @escaping () -> Void) -> Disposable { let observer = AnonymousObserver { e in if case .completed = e { @@ -173,7 +173,7 @@ public extension ObservableType { All internal subscribe calls go through this method. */ // @warn_unused_result(message: "http://git.io/rxs.ud") - func subscribeSafe(_ observer: O) -> Disposable { + func subscribeSafe(_ observer: O) -> Disposable where O.E == E { return self.asObservable().subscribe(observer) } } diff --git a/RxSwift/ObservableType.swift b/RxSwift/ObservableType.swift index a733a5bb..6c7be851 100644 --- a/RxSwift/ObservableType.swift +++ b/RxSwift/ObservableType.swift @@ -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(_ observer: O) -> Disposable + func subscribe(_ observer: O) -> Disposable where O.E == E } extension ObservableType { diff --git a/RxSwift/Observables/Implementations/AddRef.swift b/RxSwift/Observables/Implementations/AddRef.swift index 44b7f079..37ccaa09 100644 --- a/RxSwift/Observables/Implementations/AddRef.swift +++ b/RxSwift/Observables/Implementations/AddRef.swift @@ -37,7 +37,7 @@ class AddRef : Producer { _refCount = refCount } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Element { let releaseDisposable = _refCount.retain() let sink = AddRefSink(observer: observer) sink.disposable = Disposables.create(releaseDisposable, _source.subscribeSafe(sink)) diff --git a/RxSwift/Observables/Implementations/Amb.swift b/RxSwift/Observables/Implementations/Amb.swift index 7e85093d..59c969f3 100644 --- a/RxSwift/Observables/Implementations/Amb.swift +++ b/RxSwift/Observables/Implementations/Amb.swift @@ -14,7 +14,7 @@ enum AmbState { case right } -class AmbObserver : ObserverType { +class AmbObserver : ObserverType where O.E == ElementType { typealias Element = ElementType typealias Parent = AmbSink typealias This = AmbObserver @@ -48,7 +48,7 @@ class AmbObserver : Obser } } -class AmbSink : Sink { +class AmbSink : Sink where O.E == ElementType { typealias Parent = Amb typealias AmbObserverType = AmbObserver @@ -114,7 +114,7 @@ class Amb: Producer { _right = right } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Element { let sink = AmbSink(parent: self, observer: observer) sink.disposable = sink.run() return sink diff --git a/RxSwift/Observables/Implementations/AnonymousObservable.swift b/RxSwift/Observables/Implementations/AnonymousObservable.swift index c899f3f6..93942240 100644 --- a/RxSwift/Observables/Implementations/AnonymousObservable.swift +++ b/RxSwift/Observables/Implementations/AnonymousObservable.swift @@ -48,7 +48,7 @@ class AnonymousObservable : Producer { _subscribeHandler = subscribeHandler } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Element { let sink = AnonymousObservableSink(observer: observer) sink.disposable = sink.run(self) return sink diff --git a/RxSwift/Observables/Implementations/Buffer.swift b/RxSwift/Observables/Implementations/Buffer.swift index 76128de8..626c5fb6 100644 --- a/RxSwift/Observables/Implementations/Buffer.swift +++ b/RxSwift/Observables/Implementations/Buffer.swift @@ -10,10 +10,10 @@ import Foundation class BufferTimeCount : Producer<[Element]> { - private let _timeSpan: RxTimeInterval - private let _count: Int - private let _scheduler: SchedulerType - private let _source: Observable + fileprivate let _timeSpan: RxTimeInterval + fileprivate let _count: Int + fileprivate let _scheduler: SchedulerType + fileprivate let _source: Observable init(source: Observable, timeSpan: RxTimeInterval, count: Int, scheduler: SchedulerType) { _source = source @@ -22,18 +22,18 @@ class BufferTimeCount : Producer<[Element]> { _scheduler = scheduler } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == [Element] { let sink = BufferTimeCountSink(parent: self, observer: observer) sink.disposable = sink.run() return sink } } -class BufferTimeCountSink +class BufferTimeCountSink : Sink , LockOwnerType , ObserverType - , SynchronizedOnType { + , SynchronizedOnType where O.E == [Element] { typealias Parent = BufferTimeCount typealias E = Element diff --git a/RxSwift/Observables/Implementations/Catch.swift b/RxSwift/Observables/Implementations/Catch.swift index baaeb000..0ec6d6da 100644 --- a/RxSwift/Observables/Implementations/Catch.swift +++ b/RxSwift/Observables/Implementations/Catch.swift @@ -78,15 +78,15 @@ class CatchSink : Sink, ObserverType { class Catch : Producer { typealias Handler = (Swift.Error) throws -> Observable - private let _source: Observable - private let _handler: Handler + fileprivate let _source: Observable + fileprivate let _handler: Handler init(source: Observable, handler: Handler) { _source = source _handler = handler } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Element { let sink = CatchSink(parent: self, observer: observer) sink.disposable = sink.run() return sink @@ -95,9 +95,9 @@ class Catch : Producer { // catch enumerable -class CatchSequenceSink +class CatchSequenceSink : TailRecursiveSink - , ObserverType { + , ObserverType where S.Iterator.Element : ObservableConvertibleType, S.Iterator.Element.E == O.E { typealias Element = O.E typealias Parent = CatchSequence @@ -145,7 +145,7 @@ class CatchSequenceSink : Producer { +class CatchSequence : Producer where S.Iterator.Element : ObservableConvertibleType { typealias Element = S.Iterator.Element.E let sources: S @@ -154,7 +154,7 @@ class CatchSequence(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Element { let sink = CatchSequenceSink(observer: observer) sink.disposable = sink.run((self.sources.makeIterator(), nil)) return sink diff --git a/RxSwift/Observables/Implementations/CombineLatest+CollectionType.swift b/RxSwift/Observables/Implementations/CombineLatest+CollectionType.swift index d4212fa8..16c9d98c 100644 --- a/RxSwift/Observables/Implementations/CombineLatest+CollectionType.swift +++ b/RxSwift/Observables/Implementations/CombineLatest+CollectionType.swift @@ -8,8 +8,8 @@ import Foundation -class CombineLatestCollectionTypeSink - : Sink { +class CombineLatestCollectionTypeSink + : Sink where C.Iterator.Element : ObservableConvertibleType, O.E == R { typealias Parent = CombineLatestCollectionType typealias SourceElement = C.Iterator.Element.E @@ -104,7 +104,7 @@ class CombineLatestCollectionTypeSink : Producer { +class CombineLatestCollectionType : Producer where C.Iterator.Element : ObservableConvertibleType { typealias ResultSelector = ([C.Iterator.Element.E]) throws -> R let _sources: C @@ -117,7 +117,7 @@ class CombineLatestCollectionType(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == R { let sink = CombineLatestCollectionTypeSink(parent: self, observer: observer) sink.disposable = sink.run() return sink diff --git a/RxSwift/Observables/Implementations/CombineLatest+arity.swift b/RxSwift/Observables/Implementations/CombineLatest+arity.swift index 989d749a..43ac6eb1 100644 --- a/RxSwift/Observables/Implementations/CombineLatest+arity.swift +++ b/RxSwift/Observables/Implementations/CombineLatest+arity.swift @@ -83,7 +83,7 @@ class CombineLatest2 : Producer { _resultSelector = resultSelector } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == R { let sink = CombineLatestSink2_(parent: self, observer: observer) sink.disposable = sink.run() return sink @@ -171,7 +171,7 @@ class CombineLatest3 : Producer { _resultSelector = resultSelector } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == R { let sink = CombineLatestSink3_(parent: self, observer: observer) sink.disposable = sink.run() return sink @@ -266,7 +266,7 @@ class CombineLatest4 : Producer { _resultSelector = resultSelector } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == R { let sink = CombineLatestSink4_(parent: self, observer: observer) sink.disposable = sink.run() return sink @@ -368,7 +368,7 @@ class CombineLatest5 : Producer { _resultSelector = resultSelector } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == R { let sink = CombineLatestSink5_(parent: self, observer: observer) sink.disposable = sink.run() return sink @@ -477,7 +477,7 @@ class CombineLatest6 : Producer { _resultSelector = resultSelector } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == R { let sink = CombineLatestSink6_(parent: self, observer: observer) sink.disposable = sink.run() return sink @@ -593,7 +593,7 @@ class CombineLatest7 : Producer { _resultSelector = resultSelector } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == R { let sink = CombineLatestSink7_(parent: self, observer: observer) sink.disposable = sink.run() return sink @@ -716,7 +716,7 @@ class CombineLatest8 : Producer { _resultSelector = resultSelector } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == R { let sink = CombineLatestSink8_(parent: self, observer: observer) sink.disposable = sink.run() return sink diff --git a/RxSwift/Observables/Implementations/CombineLatest+arity.tt b/RxSwift/Observables/Implementations/CombineLatest+arity.tt index 624a241e..7887576e 100644 --- a/RxSwift/Observables/Implementations/CombineLatest+arity.tt +++ b/RxSwift/Observables/Implementations/CombineLatest+arity.tt @@ -87,7 +87,7 @@ class CombineLatest<%= i %><<%= (Array(1...i).map { "E\($0)" }).joined(separator _resultSelector = resultSelector } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == R { let sink = CombineLatestSink<%= i %>_(parent: self, observer: observer) sink.disposable = sink.run() return sink diff --git a/RxSwift/Observables/Implementations/Concat.swift b/RxSwift/Observables/Implementations/Concat.swift index b321a33e..34ef8e93 100644 --- a/RxSwift/Observables/Implementations/Concat.swift +++ b/RxSwift/Observables/Implementations/Concat.swift @@ -9,9 +9,9 @@ import Foundation -class ConcatSink +class ConcatSink : TailRecursiveSink - , ObserverType { + , ObserverType where S.Iterator.Element : ObservableConvertibleType, S.Iterator.Element.E == O.E { typealias Element = O.E override init(observer: O) { @@ -44,7 +44,7 @@ class ConcatSink : Producer { +class Concat : Producer where S.Iterator.Element : ObservableConvertibleType { typealias Element = S.Iterator.Element.E private let _sources: S @@ -55,7 +55,7 @@ class Concat : _count = count } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Element { let sink = ConcatSink(observer: observer) sink.disposable = sink.run((_sources.makeIterator(), _count)) return sink diff --git a/RxSwift/Observables/Implementations/ConnectableObservable.swift b/RxSwift/Observables/Implementations/ConnectableObservable.swift index 573d7608..b42c2ad5 100644 --- a/RxSwift/Observables/Implementations/ConnectableObservable.swift +++ b/RxSwift/Observables/Implementations/ConnectableObservable.swift @@ -11,7 +11,7 @@ import Foundation /** Represents an observable wrapper that can be connected and disconnected from its underlying observable sequence. */ -public class ConnectableObservable +open class ConnectableObservable : Observable , ConnectableObservableType { @@ -20,7 +20,7 @@ public class ConnectableObservable - returns: Disposable used to disconnect the observable wrapper from its source, causing subscribed observer to stop receiving values from the underlying observable sequence. */ - public func connect() -> Disposable { + open func connect() -> Disposable { abstractMethod() } } @@ -90,7 +90,7 @@ class ConnectableObservableAdapter } } - override func subscribe(_ observer: O) -> Disposable { + override func subscribe(_ observer: O) -> Disposable where O.E == S.E { return _subject.subscribe(observer) } } diff --git a/RxSwift/Observables/Implementations/Debug.swift b/RxSwift/Observables/Implementations/Debug.swift index aa4e825b..018d30b2 100644 --- a/RxSwift/Observables/Implementations/Debug.swift +++ b/RxSwift/Observables/Implementations/Debug.swift @@ -14,7 +14,7 @@ func logEvent(_ identifier: String, dateFormat: DateFormatter, content: String) print("\(dateFormat.string(from: Date())): \(identifier) -> \(content)") } -class DebugSink : Sink, ObserverType { +class DebugSink : Sink, ObserverType where O.E == Source.E { typealias Element = O.E typealias Parent = Debug @@ -73,7 +73,7 @@ class Debug : Producer { _source = source } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Source.E { let sink = DebugSink(parent: self, observer: observer) sink.disposable = _source.subscribe(sink) return sink diff --git a/RxSwift/Observables/Implementations/Deferred.swift b/RxSwift/Observables/Implementations/Deferred.swift index bea825c3..d3e58ccc 100644 --- a/RxSwift/Observables/Implementations/Deferred.swift +++ b/RxSwift/Observables/Implementations/Deferred.swift @@ -8,7 +8,7 @@ import Foundation -class DeferredSink : Sink, ObserverType { +class DeferredSink : Sink, ObserverType where S.E == O.E { typealias E = O.E private let _observableFactory: () throws -> S @@ -53,7 +53,7 @@ class Deferred : Producer { _observableFactory = observableFactory } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == S.E { let sink = DeferredSink(observableFactory: _observableFactory, observer: observer) sink.disposable = sink.run() return sink diff --git a/RxSwift/Observables/Implementations/DelaySubscription.swift b/RxSwift/Observables/Implementations/DelaySubscription.swift index 031293f6..fd6a1186 100644 --- a/RxSwift/Observables/Implementations/DelaySubscription.swift +++ b/RxSwift/Observables/Implementations/DelaySubscription.swift @@ -8,9 +8,9 @@ import Foundation -class DelaySubscriptionSink +class DelaySubscriptionSink : Sink - , ObserverType { + , ObserverType where O.E == ElementType { typealias Parent = DelaySubscription typealias E = O.E @@ -41,7 +41,7 @@ class DelaySubscription: Producer { _scheduler = scheduler } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Element { let sink = DelaySubscriptionSink(parent: self, observer: observer) sink.disposable = _scheduler.scheduleRelative((), dueTime: _dueTime) { _ in return self._source.subscribe(sink) diff --git a/RxSwift/Observables/Implementations/DistinctUntilChanged.swift b/RxSwift/Observables/Implementations/DistinctUntilChanged.swift index 60080894..31f6fc31 100644 --- a/RxSwift/Observables/Implementations/DistinctUntilChanged.swift +++ b/RxSwift/Observables/Implementations/DistinctUntilChanged.swift @@ -62,7 +62,7 @@ class DistinctUntilChanged: Producer { _comparer = comparer } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Element { let sink = DistinctUntilChangedSink(parent: self, observer: observer) sink.disposable = _source.subscribe(sink) return sink diff --git a/RxSwift/Observables/Implementations/Do.swift b/RxSwift/Observables/Implementations/Do.swift index 9cc0c81e..f4e29de2 100644 --- a/RxSwift/Observables/Implementations/Do.swift +++ b/RxSwift/Observables/Implementations/Do.swift @@ -49,7 +49,7 @@ class Do : Producer { _onDispose = onDispose } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Element { _onSubscribe?() let sink = DoSink(parent: self, observer: observer) let subscription = _source.subscribe(sink) diff --git a/RxSwift/Observables/Implementations/ElementAt.swift b/RxSwift/Observables/Implementations/ElementAt.swift index 1ceb14f9..3435f6a3 100644 --- a/RxSwift/Observables/Implementations/ElementAt.swift +++ b/RxSwift/Observables/Implementations/ElementAt.swift @@ -9,7 +9,7 @@ import Foundation -class ElementAtSink : Sink, ObserverType { +class ElementAtSink : Sink, ObserverType where O.E == SourceType { typealias Parent = ElementAt let _parent: Parent @@ -71,7 +71,7 @@ class ElementAt : Producer { self._throwOnEmpty = throwOnEmpty } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == SourceType { let sink = ElementAtSink(parent: self, observer: observer) sink.disposable = _source.subscribeSafe(sink) return sink diff --git a/RxSwift/Observables/Implementations/Empty.swift b/RxSwift/Observables/Implementations/Empty.swift index 3ac16332..f28690f5 100644 --- a/RxSwift/Observables/Implementations/Empty.swift +++ b/RxSwift/Observables/Implementations/Empty.swift @@ -9,7 +9,7 @@ import Foundation class Empty : Producer { - override func subscribe(_ observer: O) -> Disposable { + override func subscribe(_ observer: O) -> Disposable where O.E == Element { observer.on(.completed) return Disposables.create() } diff --git a/RxSwift/Observables/Implementations/Error.swift b/RxSwift/Observables/Implementations/Error.swift index 42484cab..49d89d90 100644 --- a/RxSwift/Observables/Implementations/Error.swift +++ b/RxSwift/Observables/Implementations/Error.swift @@ -15,7 +15,7 @@ class Error : Producer { _error = error } - override func subscribe(_ observer: O) -> Disposable { + override func subscribe(_ observer: O) -> Disposable where O.E == Element { observer.on(.error(_error)) return Disposables.create() } diff --git a/RxSwift/Observables/Implementations/Filter.swift b/RxSwift/Observables/Implementations/Filter.swift index 50cfcdae..3b9c9928 100644 --- a/RxSwift/Observables/Implementations/Filter.swift +++ b/RxSwift/Observables/Implementations/Filter.swift @@ -50,7 +50,7 @@ class Filter : Producer { _predicate = predicate } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Element { let sink = FilterSink(predicate: _predicate, observer: observer) sink.disposable = _source.subscribe(sink) return sink diff --git a/RxSwift/Observables/Implementations/Generate.swift b/RxSwift/Observables/Implementations/Generate.swift index 87d28379..ddf2d93a 100644 --- a/RxSwift/Observables/Implementations/Generate.swift +++ b/RxSwift/Observables/Implementations/Generate.swift @@ -63,7 +63,7 @@ class Generate : Producer { super.init() } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == E { let sink = GenerateSink(parent: self, observer: observer) sink.disposable = sink.run() return sink diff --git a/RxSwift/Observables/Implementations/Just.swift b/RxSwift/Observables/Implementations/Just.swift index b8dcce7b..6e86206e 100644 --- a/RxSwift/Observables/Implementations/Just.swift +++ b/RxSwift/Observables/Implementations/Just.swift @@ -31,15 +31,15 @@ class JustScheduledSink : Sink { } class JustScheduled : Producer { - private let _scheduler: ImmediateSchedulerType - private let _element: Element + fileprivate let _scheduler: ImmediateSchedulerType + fileprivate let _element: Element init(element: Element, scheduler: ImmediateSchedulerType) { _scheduler = scheduler _element = element } - override func subscribe(_ observer: O) -> Disposable { + override func subscribe(_ observer: O) -> Disposable where O.E == E { let sink = JustScheduledSink(parent: self, observer: observer) sink.disposable = sink.run() return sink @@ -53,7 +53,7 @@ class Just : Producer { _element = element } - override func subscribe(_ observer: O) -> Disposable { + override func subscribe(_ observer: O) -> Disposable where O.E == Element { observer.on(.next(_element)) observer.on(.completed) return Disposables.create() diff --git a/RxSwift/Observables/Implementations/Map.swift b/RxSwift/Observables/Implementations/Map.swift index 370fe1e6..d10ae1b1 100644 --- a/RxSwift/Observables/Implementations/Map.swift +++ b/RxSwift/Observables/Implementations/Map.swift @@ -91,7 +91,7 @@ class MapWithIndex : Producer { _selector = selector } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == ResultType { let sink = MapWithIndexSink(selector: _selector, observer: observer) sink.disposable = _source.subscribe(sink) return sink @@ -118,7 +118,7 @@ class Map: Producer { #endif } - override func composeMap(_ selector: (ResultType) throws -> R) -> Observable { + override func composeMap(_ selector: @escaping (ResultType) throws -> R) -> Observable { let originalSelector = _selector return Map(source: _source, selector: { (s: SourceType) throws -> R in let r: ResultType = try originalSelector(s) @@ -126,7 +126,7 @@ class Map: Producer { }) } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == ResultType { let sink = MapSink(selector: _selector, observer: observer) sink.disposable = _source.subscribe(sink) return sink diff --git a/RxSwift/Observables/Implementations/Merge.swift b/RxSwift/Observables/Implementations/Merge.swift index e9b86ec3..0d339c4e 100644 --- a/RxSwift/Observables/Implementations/Merge.swift +++ b/RxSwift/Observables/Implementations/Merge.swift @@ -10,10 +10,10 @@ import Foundation // MARK: Limited concurrency version -class MergeLimitedSinkIter +class MergeLimitedSinkIter : ObserverType , LockOwnerType - , SynchronizedOnType { + , SynchronizedOnType where S.E == O.E { typealias E = O.E typealias DisposeKey = Bag.KeyType typealias Parent = MergeLimitedSink @@ -58,11 +58,11 @@ class MergeLimitedSinkIter +class MergeLimitedSink : Sink , ObserverType , LockOwnerType - , SynchronizedOnType { + , SynchronizedOnType where S.E == O.E { typealias E = S typealias QueueType = Queue @@ -152,7 +152,7 @@ class MergeLimited : Producer { _maxConcurrent = maxConcurrent } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == S.E { let sink = MergeLimitedSink(maxConcurrent: _maxConcurrent, observer: observer) sink.disposable = sink.run(_source) return sink @@ -161,7 +161,7 @@ class MergeLimited : Producer { // MARK: Merge -final class MergeBasicSink : MergeSink { +final class MergeBasicSink : MergeSink where O.E == S.E { override init(observer: O) { super.init(observer: observer) } @@ -173,7 +173,7 @@ final class MergeBasicSink : MergeSink { +final class FlatMapSink : MergeSink where O.E == S.E { typealias Selector = (SourceType) throws -> S private let _selector: Selector @@ -188,7 +188,7 @@ final class FlatMapSink : MergeSink { +final class FlatMapWithIndexSink : MergeSink where O.E == S.E { typealias Selector = (SourceType, Int) throws -> S private var _index = 0 @@ -206,7 +206,7 @@ final class FlatMapWithIndexSink : MergeSink { +final class FlatMapFirstSink : MergeSink where O.E == S.E { typealias Selector = (SourceType) throws -> S private let _selector: Selector @@ -228,7 +228,7 @@ final class FlatMapFirstSink : ObserverType { +class MergeSinkIter : ObserverType where O.E == S.E { typealias Parent = MergeSink typealias DisposeKey = CompositeDisposable.DisposeKey typealias E = O.E @@ -270,9 +270,9 @@ class MergeSinkIter +class MergeSink : Sink - , ObserverType { + , ObserverType where O.E == S.E { typealias ResultType = O.E typealias Element = SourceType @@ -362,7 +362,7 @@ final class FlatMap: Producer { _selector = selector } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == S.E { let sink = FlatMapSink(selector: _selector, observer: observer) sink.disposable = sink.run(_source) return sink @@ -381,7 +381,7 @@ final class FlatMapWithIndex: Producer _selector = selector } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == S.E { let sink = FlatMapWithIndexSink(selector: _selector, observer: observer) sink.disposable = sink.run(_source) return sink @@ -401,7 +401,7 @@ final class FlatMapFirst: Producer(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == S.E { let sink = FlatMapFirstSink(selector: _selector, observer: observer) sink.disposable = sink.run(_source) return sink @@ -415,7 +415,7 @@ final class Merge : Producer { _source = source } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == S.E { let sink = MergeBasicSink(observer: observer) sink.disposable = sink.run(_source) return sink diff --git a/RxSwift/Observables/Implementations/Multicast.swift b/RxSwift/Observables/Implementations/Multicast.swift index dbdec380..4fa01735 100644 --- a/RxSwift/Observables/Implementations/Multicast.swift +++ b/RxSwift/Observables/Implementations/Multicast.swift @@ -63,7 +63,7 @@ class Multicast: Producer { _selector = selector } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == R { let sink = MulticastSink(parent: self, observer: observer) sink.disposable = sink.run() return sink diff --git a/RxSwift/Observables/Implementations/Never.swift b/RxSwift/Observables/Implementations/Never.swift index e0ac7d8f..82d28ec7 100644 --- a/RxSwift/Observables/Implementations/Never.swift +++ b/RxSwift/Observables/Implementations/Never.swift @@ -9,7 +9,7 @@ import Foundation class Never : Producer { - override func subscribe(_ observer: O) -> Disposable { + override func subscribe(_ observer: O) -> Disposable where O.E == Element { return Disposables.create() } } diff --git a/RxSwift/Observables/Implementations/ObserveOn.swift b/RxSwift/Observables/Implementations/ObserveOn.swift index 4aaa0d4c..31738cce 100644 --- a/RxSwift/Observables/Implementations/ObserveOn.swift +++ b/RxSwift/Observables/Implementations/ObserveOn.swift @@ -21,7 +21,7 @@ class ObserveOn : Producer { #endif } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == E { let sink = ObserveOnSink(scheduler: scheduler, observer: observer) sink._subscription.disposable = source.subscribe(sink) return sink diff --git a/RxSwift/Observables/Implementations/ObserveOnSerialDispatchQueue.swift b/RxSwift/Observables/Implementations/ObserveOnSerialDispatchQueue.swift index 4d352525..20711e03 100644 --- a/RxSwift/Observables/Implementations/ObserveOnSerialDispatchQueue.swift +++ b/RxSwift/Observables/Implementations/ObserveOnSerialDispatchQueue.swift @@ -66,7 +66,7 @@ class ObserveOnSerialDispatchQueue : Producer { #endif } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == E { let sink = ObserveOnSerialDispatchQueueSink(scheduler: scheduler, observer: observer) sink.subscription.disposable = source.subscribe(sink) return sink diff --git a/RxSwift/Observables/Implementations/Producer.swift b/RxSwift/Observables/Implementations/Producer.swift index 64e215ec..2046a229 100644 --- a/RxSwift/Observables/Implementations/Producer.swift +++ b/RxSwift/Observables/Implementations/Producer.swift @@ -13,7 +13,7 @@ class Producer : Observable { super.init() } - override func subscribe(_ observer: O) -> Disposable { + override func subscribe(_ observer: O) -> Disposable where O.E == Element { if !CurrentThreadScheduler.isScheduleRequired { return run(observer) } @@ -24,7 +24,7 @@ class Producer : Observable { } } - func run(_ observer: O) -> Disposable { + func run(_ observer: O) -> Disposable where O.E == Element { abstractMethod() } } diff --git a/RxSwift/Observables/Implementations/Range.swift b/RxSwift/Observables/Implementations/Range.swift index 1bd0e8b8..15319991 100644 --- a/RxSwift/Observables/Implementations/Range.swift +++ b/RxSwift/Observables/Implementations/Range.swift @@ -9,9 +9,9 @@ import Foundation class RangeProducer : Producer { - private let _start: E - private let _count: E - private let _scheduler: ImmediateSchedulerType + fileprivate let _start: E + fileprivate let _count: E + fileprivate let _scheduler: ImmediateSchedulerType init(start: E, count: E, scheduler: ImmediateSchedulerType) { if count < 0 { @@ -27,14 +27,14 @@ class RangeProducer : Producer { _scheduler = scheduler } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == E { let sink = RangeSink(parent: self, observer: observer) sink.disposable = sink.run() return sink } } -class RangeSink : Sink { +class RangeSink : Sink where O.E: SignedInteger { typealias Parent = RangeProducer private let _parent: Parent diff --git a/RxSwift/Observables/Implementations/Reduce.swift b/RxSwift/Observables/Implementations/Reduce.swift index 6173d1b5..cda7bbae 100644 --- a/RxSwift/Observables/Implementations/Reduce.swift +++ b/RxSwift/Observables/Implementations/Reduce.swift @@ -66,7 +66,7 @@ class Reduce : Producer { _mapResult = mapResult } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == ResultType { let sink = ReduceSink(parent: self, observer: observer) sink.disposable = _source.subscribe(sink) return sink diff --git a/RxSwift/Observables/Implementations/RefCount.swift b/RxSwift/Observables/Implementations/RefCount.swift index 7ba86272..81a3d21e 100644 --- a/RxSwift/Observables/Implementations/RefCount.swift +++ b/RxSwift/Observables/Implementations/RefCount.swift @@ -8,9 +8,9 @@ import Foundation -class RefCountSink +class RefCountSink : Sink - , ObserverType { + , ObserverType where CO.E == O.E { typealias Element = O.E typealias Parent = RefCount @@ -76,7 +76,7 @@ class RefCount: Producer { _source = source } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == CO.E { let sink = RefCountSink(parent: self, observer: observer) sink.disposable = sink.run() return sink diff --git a/RxSwift/Observables/Implementations/Repeat.swift b/RxSwift/Observables/Implementations/Repeat.swift index 4223fe8e..d8e20baf 100644 --- a/RxSwift/Observables/Implementations/Repeat.swift +++ b/RxSwift/Observables/Implementations/Repeat.swift @@ -9,15 +9,15 @@ import Foundation class RepeatElement : Producer { - private let _element: Element - private let _scheduler: ImmediateSchedulerType + fileprivate let _element: Element + fileprivate let _scheduler: ImmediateSchedulerType init(element: Element, scheduler: ImmediateSchedulerType) { _element = element _scheduler = scheduler } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Element { let sink = RepeatElementSink(parent: self, observer: observer) sink.disposable = sink.run() diff --git a/RxSwift/Observables/Implementations/RetryWhen.swift b/RxSwift/Observables/Implementations/RetryWhen.swift index 5c483e27..78302987 100644 --- a/RxSwift/Observables/Implementations/RetryWhen.swift +++ b/RxSwift/Observables/Implementations/RetryWhen.swift @@ -8,13 +8,13 @@ import Foundation -class RetryTriggerSink - : ObserverType { +class RetryTriggerSink + : ObserverType where S.Iterator.Element : ObservableType, S.Iterator.Element.E == O.E { typealias E = TriggerObservable.E typealias Parent = RetryWhenSequenceSinkIter - private let _parent: Parent + fileprivate let _parent: Parent init(parent: Parent) { _parent = parent @@ -35,14 +35,14 @@ class RetryTriggerSink +class RetryWhenSequenceSinkIter : SingleAssignmentDisposable - , ObserverType { + , ObserverType where S.Iterator.Element : ObservableType, S.Iterator.Element.E == O.E { typealias E = O.E typealias Parent = RetryWhenSequenceSink - private let _parent: Parent - private let _errorHandlerSubscription = SingleAssignmentDisposable() + fileprivate let _parent: Parent + fileprivate let _errorHandlerSubscription = SingleAssignmentDisposable() init(parent: Parent) { _parent = parent @@ -79,19 +79,19 @@ class RetryWhenSequenceSinkIter - : TailRecursiveSink { +class RetryWhenSequenceSink + : TailRecursiveSink where S.Iterator.Element : ObservableType, S.Iterator.Element.E == O.E { typealias Element = O.E typealias Parent = RetryWhenSequence let _lock = NSRecursiveLock() - private let _parent: Parent + fileprivate let _parent: Parent - private var _lastError: Swift.Error? - private let _errorSubject = PublishSubject() - private let _handler: Observable - private let _notifier = PublishSubject() + fileprivate var _lastError: Swift.Error? + fileprivate let _errorSubject = PublishSubject() + fileprivate let _handler: Observable + fileprivate let _notifier = PublishSubject() init(parent: Parent, observer: O) { _parent = parent @@ -131,18 +131,18 @@ class RetryWhenSequenceSink : Producer { +class RetryWhenSequence : Producer where S.Iterator.Element : ObservableType { typealias Element = S.Iterator.Element.E - private let _sources: S - private let _notificationHandler: (Observable) -> TriggerObservable + fileprivate let _sources: S + fileprivate let _notificationHandler: (Observable) -> TriggerObservable init(sources: S, notificationHandler: (Observable) -> TriggerObservable) { _sources = sources _notificationHandler = notificationHandler } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Element { let sink = RetryWhenSequenceSink(parent: self, observer: observer) sink.disposable = sink.run((self._sources.makeIterator(), nil)) return sink diff --git a/RxSwift/Observables/Implementations/Sample.swift b/RxSwift/Observables/Implementations/Sample.swift index 33f3f407..bfa3234b 100644 --- a/RxSwift/Observables/Implementations/Sample.swift +++ b/RxSwift/Observables/Implementations/Sample.swift @@ -8,15 +8,15 @@ import Foundation -class SamplerSink +class SamplerSink : ObserverType , LockOwnerType - , SynchronizedOnType { + , SynchronizedOnType where O.E == ElementType { typealias E = SampleType typealias Parent = SampleSequenceSink - private let _parent: Parent + fileprivate let _parent: Parent var _lock: NSRecursiveLock { return _parent._lock @@ -69,15 +69,15 @@ class SampleSequenceSink typealias Element = O.E typealias Parent = Sample - private let _parent: Parent + fileprivate let _parent: Parent let _lock = NSRecursiveLock() // state - private var _element = nil as Element? - private var _atEnd = false + fileprivate var _element = nil as Element? + fileprivate var _atEnd = false - private let _sourceSubscription = SingleAssignmentDisposable() + fileprivate let _sourceSubscription = SingleAssignmentDisposable() init(parent: Parent, observer: O) { _parent = parent @@ -111,9 +111,9 @@ class SampleSequenceSink } class Sample : Producer { - private let _source: Observable - private let _sampler: Observable - private let _onlyNew: Bool + fileprivate let _source: Observable + fileprivate let _sampler: Observable + fileprivate let _onlyNew: Bool init(source: Observable, sampler: Observable, onlyNew: Bool) { _source = source @@ -121,7 +121,7 @@ class Sample : Producer { _onlyNew = onlyNew } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Element { let sink = SampleSequenceSink(parent: self, observer: observer) sink.disposable = sink.run() return sink diff --git a/RxSwift/Observables/Implementations/Scan.swift b/RxSwift/Observables/Implementations/Scan.swift index 2e641edb..dee6bc64 100644 --- a/RxSwift/Observables/Implementations/Scan.swift +++ b/RxSwift/Observables/Implementations/Scan.swift @@ -8,12 +8,12 @@ import Foundation -class ScanSink : Sink, ObserverType { +class ScanSink : Sink, ObserverType where O.E == Accumulate { typealias Parent = Scan typealias E = ElementType - private let _parent: Parent - private var _accumulate: Accumulate + fileprivate let _parent: Parent + fileprivate var _accumulate: Accumulate init(parent: Parent, observer: O) { _parent = parent @@ -46,9 +46,9 @@ class ScanSink class Scan: Producer { typealias Accumulator = (Accumulate, Element) throws -> Accumulate - private let _source: Observable - private let _seed: Accumulate - private let _accumulator: Accumulator + fileprivate let _source: Observable + fileprivate let _seed: Accumulate + fileprivate let _accumulator: Accumulator init(source: Observable, seed: Accumulate, accumulator: Accumulator) { _source = source @@ -56,7 +56,7 @@ class Scan: Producer { _accumulator = accumulator } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Accumulate { let sink = ScanSink(parent: self, observer: observer) sink.disposable = _source.subscribe(sink) return sink diff --git a/RxSwift/Observables/Implementations/Sequence.swift b/RxSwift/Observables/Implementations/Sequence.swift index 453c32a2..205e4223 100644 --- a/RxSwift/Observables/Implementations/Sequence.swift +++ b/RxSwift/Observables/Implementations/Sequence.swift @@ -8,7 +8,7 @@ import Foundation -class ObservableSequenceSink : Sink { +class ObservableSequenceSink : Sink where S.Iterator.Element == O.E { typealias Parent = ObservableSequence private let _parent: Parent @@ -33,15 +33,15 @@ class ObservableSequenceSink : Producer { - private let _elements: S - private let _scheduler: ImmediateSchedulerType + fileprivate let _elements: S + fileprivate let _scheduler: ImmediateSchedulerType init(elements: S, scheduler: ImmediateSchedulerType) { _elements = elements _scheduler = scheduler } - override func subscribe(_ observer: O) -> Disposable { + override func subscribe(_ observer: O) -> Disposable where O.E == E { let sink = ObservableSequenceSink(parent: self, observer: observer) sink.disposable = sink.run() return sink diff --git a/RxSwift/Observables/Implementations/ShareReplay1.swift b/RxSwift/Observables/Implementations/ShareReplay1.swift index 23853a9f..fd8779b4 100644 --- a/RxSwift/Observables/Implementations/ShareReplay1.swift +++ b/RxSwift/Observables/Implementations/ShareReplay1.swift @@ -30,12 +30,12 @@ final class ShareReplay1 self._source = source } - override func subscribe(_ observer: O) -> Disposable { + override func subscribe(_ observer: O) -> Disposable where O.E == E { _lock.lock(); defer { _lock.unlock() } return _synchronized_subscribe(observer) } - func _synchronized_subscribe(_ observer: O) -> Disposable { + func _synchronized_subscribe(_ observer: O) -> Disposable where O.E == E { if let element = self._element { observer.on(.next(element)) } diff --git a/RxSwift/Observables/Implementations/ShareReplay1WhileConnected.swift b/RxSwift/Observables/Implementations/ShareReplay1WhileConnected.swift index 5a08396a..4e0aa51d 100644 --- a/RxSwift/Observables/Implementations/ShareReplay1WhileConnected.swift +++ b/RxSwift/Observables/Implementations/ShareReplay1WhileConnected.swift @@ -28,12 +28,12 @@ final class ShareReplay1WhileConnected self._source = source } - override func subscribe(_ observer: O) -> Disposable { + override func subscribe(_ observer: O) -> Disposable where O.E == E { _lock.lock(); defer { _lock.unlock() } return _synchronized_subscribe(observer) } - func _synchronized_subscribe(_ observer: O) -> Disposable { + func _synchronized_subscribe(_ observer: O) -> Disposable where O.E == E { if let element = self._element { observer.on(.next(element)) } diff --git a/RxSwift/Observables/Implementations/SingleAsync.swift b/RxSwift/Observables/Implementations/SingleAsync.swift index a4c5d291..5fecf91c 100644 --- a/RxSwift/Observables/Implementations/SingleAsync.swift +++ b/RxSwift/Observables/Implementations/SingleAsync.swift @@ -8,7 +8,7 @@ import Foundation -class SingleAsyncSink : Sink, ObserverType { +class SingleAsyncSink : Sink, ObserverType where O.E == ElementType { typealias Parent = SingleAsync typealias E = ElementType @@ -60,15 +60,15 @@ class SingleAsyncSink : S class SingleAsync: Producer { typealias Predicate = (Element) throws -> Bool - private let _source: Observable - private let _predicate: Predicate? + fileprivate let _source: Observable + fileprivate let _predicate: Predicate? init(source: Observable, predicate: Predicate? = nil) { _source = source _predicate = predicate } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Element { let sink = SingleAsyncSink(parent: self, observer: observer) sink.disposable = _source.subscribe(sink) return sink diff --git a/RxSwift/Observables/Implementations/Sink.swift b/RxSwift/Observables/Implementations/Sink.swift index 018fd5ea..b548906c 100644 --- a/RxSwift/Observables/Implementations/Sink.swift +++ b/RxSwift/Observables/Implementations/Sink.swift @@ -9,7 +9,7 @@ import Foundation class Sink : SingleAssignmentDisposable { - private let _observer: O + fileprivate let _observer: O init(observer: O) { #if TRACE_RESOURCES diff --git a/RxSwift/Observables/Implementations/Skip.swift b/RxSwift/Observables/Implementations/Skip.swift index 9d13c5e4..ad8b815a 100644 --- a/RxSwift/Observables/Implementations/Skip.swift +++ b/RxSwift/Observables/Implementations/Skip.swift @@ -10,7 +10,7 @@ import Foundation // count version -class SkipCountSink : Sink, ObserverType { +class SkipCountSink : Sink, ObserverType where O.E == ElementType { typealias Parent = SkipCount typealias Element = ElementType @@ -54,7 +54,7 @@ class SkipCount: Producer { self.count = count } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Element { let sink = SkipCountSink(parent: self, observer: observer) sink.disposable = source.subscribe(sink) @@ -64,7 +64,7 @@ class SkipCount: Producer { // time version -class SkipTimeSink : Sink, ObserverType { +class SkipTimeSink : Sink, ObserverType where O.E == ElementType { typealias Parent = SkipTime typealias Element = ElementType @@ -120,7 +120,7 @@ class SkipTime: Producer { self.duration = duration } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Element { let sink = SkipTimeSink(parent: self, observer: observer) sink.disposable = sink.run() return sink diff --git a/RxSwift/Observables/Implementations/SkipUntil.swift b/RxSwift/Observables/Implementations/SkipUntil.swift index 43122869..59508141 100644 --- a/RxSwift/Observables/Implementations/SkipUntil.swift +++ b/RxSwift/Observables/Implementations/SkipUntil.swift @@ -8,14 +8,14 @@ import Foundation -class SkipUntilSinkOther +class SkipUntilSinkOther : ObserverType , LockOwnerType - , SynchronizedOnType { + , SynchronizedOnType where O.E == ElementType { typealias Parent = SkipUntilSink typealias E = Other - private let _parent: Parent + fileprivate let _parent: Parent var _lock: NSRecursiveLock { return _parent._lock @@ -56,19 +56,19 @@ class SkipUntilSinkOther +class SkipUntilSink : Sink , ObserverType , LockOwnerType - , SynchronizedOnType { + , SynchronizedOnType where O.E == ElementType { typealias E = ElementType typealias Parent = SkipUntil let _lock = NSRecursiveLock() - private let _parent: Parent - private var _forwardElements = false + fileprivate let _parent: Parent + fileprivate var _forwardElements = false - private let _sourceSubscription = SingleAssignmentDisposable() + fileprivate let _sourceSubscription = SingleAssignmentDisposable() init(parent: Parent, observer: O) { _parent = parent @@ -109,15 +109,15 @@ class SkipUntilSink: Producer { - private let _source: Observable - private let _other: Observable + fileprivate let _source: Observable + fileprivate let _other: Observable init(source: Observable, other: Observable) { _source = source _other = other } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Element { let sink = SkipUntilSink(parent: self, observer: observer) sink.disposable = sink.run() return sink diff --git a/RxSwift/Observables/Implementations/SkipWhile.swift b/RxSwift/Observables/Implementations/SkipWhile.swift index 2aa84760..a1e28dee 100644 --- a/RxSwift/Observables/Implementations/SkipWhile.swift +++ b/RxSwift/Observables/Implementations/SkipWhile.swift @@ -6,13 +6,13 @@ // Copyright © 2015 Krunoslav Zaher. All rights reserved. // -class SkipWhileSink : Sink, ObserverType { +class SkipWhileSink : Sink, ObserverType where O.E == ElementType { typealias Parent = SkipWhile typealias Element = ElementType - private let _parent: Parent - private var _running = false + fileprivate let _parent: Parent + fileprivate var _running = false init(parent: Parent, observer: O) { _parent = parent @@ -42,14 +42,14 @@ class SkipWhileSink : Sin } } -class SkipWhileSinkWithIndex : Sink, ObserverType { +class SkipWhileSinkWithIndex : Sink, ObserverType where O.E == ElementType { typealias Parent = SkipWhile typealias Element = ElementType - private let _parent: Parent - private var _index = 0 - private var _running = false + fileprivate let _parent: Parent + fileprivate var _index = 0 + fileprivate var _running = false init(parent: Parent, observer: O) { _parent = parent @@ -84,9 +84,9 @@ class SkipWhile: Producer { typealias Predicate = (Element) throws -> Bool typealias PredicateWithIndex = (Element, Int) throws -> Bool - private let _source: Observable - private let _predicate: Predicate! - private let _predicateWithIndex: PredicateWithIndex! + fileprivate let _source: Observable + fileprivate let _predicate: Predicate! + fileprivate let _predicateWithIndex: PredicateWithIndex! init(source: Observable, predicate: Predicate) { _source = source @@ -100,7 +100,7 @@ class SkipWhile: Producer { _predicateWithIndex = predicate } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Element { if let _ = _predicate { let sink = SkipWhileSink(parent: self, observer: observer) sink.disposable = _source.subscribe(sink) diff --git a/RxSwift/Observables/Implementations/StartWith.swift b/RxSwift/Observables/Implementations/StartWith.swift index c8ffd975..7c46f1e7 100644 --- a/RxSwift/Observables/Implementations/StartWith.swift +++ b/RxSwift/Observables/Implementations/StartWith.swift @@ -18,7 +18,7 @@ class StartWith: Producer { super.init() } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Element { for e in elements { observer.on(.next(e)) } diff --git a/RxSwift/Observables/Implementations/SubscribeOn.swift b/RxSwift/Observables/Implementations/SubscribeOn.swift index ac4bb84e..fe810ee5 100644 --- a/RxSwift/Observables/Implementations/SubscribeOn.swift +++ b/RxSwift/Observables/Implementations/SubscribeOn.swift @@ -8,7 +8,7 @@ import Foundation -class SubscribeOnSink : Sink, ObserverType { +class SubscribeOnSink : Sink, ObserverType where Ob.E == O.E { typealias Element = O.E typealias Parent = SubscribeOn @@ -52,7 +52,7 @@ class SubscribeOn : Producer { self.scheduler = scheduler } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Ob.E { let sink = SubscribeOnSink(parent: self, observer: observer) sink.disposable = sink.run() return sink diff --git a/RxSwift/Observables/Implementations/Switch.swift b/RxSwift/Observables/Implementations/Switch.swift index b79dd142..f16e3af1 100644 --- a/RxSwift/Observables/Implementations/Switch.swift +++ b/RxSwift/Observables/Implementations/Switch.swift @@ -8,22 +8,22 @@ import Foundation -class SwitchSink +class SwitchSink : Sink , ObserverType , LockOwnerType - , SynchronizedOnType { + , SynchronizedOnType where S.E == O.E { typealias E = SourceType - private let _subscriptions: SingleAssignmentDisposable = SingleAssignmentDisposable() - private let _innerSubscription: SerialDisposable = SerialDisposable() + fileprivate let _subscriptions: SingleAssignmentDisposable = SingleAssignmentDisposable() + fileprivate let _innerSubscription: SerialDisposable = SerialDisposable() let _lock = NSRecursiveLock() // state - private var _stopped = false - private var _latest = 0 - private var _hasLatest = false + fileprivate var _stopped = false + fileprivate var _latest = 0 + fileprivate var _hasLatest = false override init(observer: O) { super.init(observer: observer) @@ -79,16 +79,16 @@ class SwitchSink +class SwitchSinkIter : ObserverType , LockOwnerType - , SynchronizedOnType { + , SynchronizedOnType where S.E == O.E { typealias E = S.E typealias Parent = SwitchSink - private let _parent: Parent - private let _id: Int - private let _self: Disposable + fileprivate let _parent: Parent + fileprivate let _id: Int + fileprivate let _self: Disposable var _lock: NSRecursiveLock { return _parent._lock @@ -133,7 +133,7 @@ class SwitchSinkIter : SwitchSink { +final class SwitchIdentitySink : SwitchSink where O.E == S.E { override init(observer: O) { super.init(observer: observer) } @@ -143,10 +143,10 @@ final class SwitchIdentitySink : SwitchSink { +final class MapSwitchSink : SwitchSink where O.E == S.E { typealias Selector = (SourceType) throws -> S - private let _selector: Selector + fileprivate let _selector: Selector init(selector: Selector, observer: O) { _selector = selector @@ -161,13 +161,13 @@ final class MapSwitchSink : Producer { - private let _source: Observable + fileprivate let _source: Observable init(source: Observable) { _source = source } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == S.E { let sink = SwitchIdentitySink(observer: observer) sink.disposable = sink.run(_source) return sink @@ -177,15 +177,15 @@ final class Switch : Producer { final class FlatMapLatest : Producer { typealias Selector = (SourceType) throws -> S - private let _source: Observable - private let _selector: Selector + fileprivate let _source: Observable + fileprivate let _selector: Selector init(source: Observable, selector: Selector) { _source = source _selector = selector } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == S.E { let sink = MapSwitchSink(selector: _selector, observer: observer) sink.disposable = sink.run(_source) return sink diff --git a/RxSwift/Observables/Implementations/Take.swift b/RxSwift/Observables/Implementations/Take.swift index 6e8d9d4b..2450ed20 100644 --- a/RxSwift/Observables/Implementations/Take.swift +++ b/RxSwift/Observables/Implementations/Take.swift @@ -10,7 +10,7 @@ import Foundation // count version -class TakeCountSink : Sink, ObserverType { +class TakeCountSink : Sink, ObserverType where O.E == ElementType { typealias Parent = TakeCount typealias E = ElementType @@ -50,8 +50,8 @@ class TakeCountSink : Sin } class TakeCount: Producer { - private let _source: Observable - private let _count: Int + fileprivate let _source: Observable + fileprivate let _count: Int init(source: Observable, count: Int) { if count < 0 { @@ -61,7 +61,7 @@ class TakeCount: Producer { _count = count } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Element { let sink = TakeCountSink(parent: self, observer: observer) sink.disposable = _source.subscribe(sink) return sink @@ -70,15 +70,15 @@ class TakeCount: Producer { // time version -class TakeTimeSink +class TakeTimeSink : Sink , LockOwnerType , ObserverType - , SynchronizedOnType { + , SynchronizedOnType where O.E == ElementType { typealias Parent = TakeTime typealias E = ElementType - private let _parent: Parent + fileprivate let _parent: Parent let _lock = NSRecursiveLock() @@ -126,9 +126,9 @@ class TakeTimeSink class TakeTime : Producer { typealias TimeInterval = RxTimeInterval - private let _source: Observable - private let _duration: TimeInterval - private let _scheduler: SchedulerType + fileprivate let _source: Observable + fileprivate let _duration: TimeInterval + fileprivate let _scheduler: SchedulerType init(source: Observable, duration: TimeInterval, scheduler: SchedulerType) { _source = source @@ -136,7 +136,7 @@ class TakeTime : Producer { _duration = duration } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Element { let sink = TakeTimeSink(parent: self, observer: observer) sink.disposable = sink.run() return sink diff --git a/RxSwift/Observables/Implementations/TakeLast.swift b/RxSwift/Observables/Implementations/TakeLast.swift index 6ac38f00..dd63912b 100644 --- a/RxSwift/Observables/Implementations/TakeLast.swift +++ b/RxSwift/Observables/Implementations/TakeLast.swift @@ -9,7 +9,7 @@ import Foundation -class TakeLastSink : Sink, ObserverType { +class TakeLastSink : Sink, ObserverType where O.E == ElementType { typealias Parent = TakeLast typealias E = ElementType @@ -44,8 +44,8 @@ class TakeLastSink : Sink } class TakeLast: Producer { - private let _source: Observable - private let _count: Int + fileprivate let _source: Observable + fileprivate let _count: Int init(source: Observable, count: Int) { if count < 0 { @@ -55,7 +55,7 @@ class TakeLast: Producer { _count = count } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Element { let sink = TakeLastSink(parent: self, observer: observer) sink.disposable = _source.subscribe(sink) return sink diff --git a/RxSwift/Observables/Implementations/TakeUntil.swift b/RxSwift/Observables/Implementations/TakeUntil.swift index dab392d4..c71b9c19 100644 --- a/RxSwift/Observables/Implementations/TakeUntil.swift +++ b/RxSwift/Observables/Implementations/TakeUntil.swift @@ -8,20 +8,20 @@ import Foundation -class TakeUntilSinkOther +class TakeUntilSinkOther : ObserverType , LockOwnerType - , SynchronizedOnType { + , SynchronizedOnType where O.E == ElementType { typealias Parent = TakeUntilSink typealias E = Other - private let _parent: Parent + fileprivate let _parent: Parent var _lock: NSRecursiveLock { return _parent._lock } - private let _subscription = SingleAssignmentDisposable() + fileprivate let _subscription = SingleAssignmentDisposable() init(parent: Parent) { _parent = parent @@ -55,20 +55,20 @@ class TakeUntilSinkOther +class TakeUntilSink : Sink , LockOwnerType , ObserverType - , SynchronizedOnType { + , SynchronizedOnType where O.E == ElementType { typealias E = ElementType typealias Parent = TakeUntil - private let _parent: Parent + fileprivate let _parent: Parent let _lock = NSRecursiveLock() // state - private var _open = false + fileprivate var _open = false init(parent: Parent, observer: O) { _parent = parent @@ -104,15 +104,15 @@ class TakeUntilSink: Producer { - private let _source: Observable - private let _other: Observable + fileprivate let _source: Observable + fileprivate let _other: Observable init(source: Observable, other: Observable) { _source = source _other = other } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Element { let sink = TakeUntilSink(parent: self, observer: observer) sink.disposable = sink.run() return sink diff --git a/RxSwift/Observables/Implementations/TakeWhile.swift b/RxSwift/Observables/Implementations/TakeWhile.swift index b8c603e8..bf70886c 100644 --- a/RxSwift/Observables/Implementations/TakeWhile.swift +++ b/RxSwift/Observables/Implementations/TakeWhile.swift @@ -8,15 +8,15 @@ import Foundation -class TakeWhileSink +class TakeWhileSink : Sink - , ObserverType { + , ObserverType where O.E == ElementType { typealias Parent = TakeWhile typealias Element = ElementType - private let _parent: Parent + fileprivate let _parent: Parent - private var _running = true + fileprivate var _running = true init(parent: Parent, observer: O) { _parent = parent @@ -52,16 +52,16 @@ class TakeWhileSink } -class TakeWhileSinkWithIndex +class TakeWhileSinkWithIndex : Sink - , ObserverType { + , ObserverType where O.E == ElementType { typealias Parent = TakeWhile typealias Element = ElementType - private let _parent: Parent + fileprivate let _parent: Parent - private var _running = true - private var _index = 0 + fileprivate var _running = true + fileprivate var _index = 0 init(parent: Parent, observer: O) { _parent = parent @@ -102,9 +102,9 @@ class TakeWhile: Producer { typealias Predicate = (Element) throws -> Bool typealias PredicateWithIndex = (Element, Int) throws -> Bool - private let _source: Observable - private let _predicate: Predicate! - private let _predicateWithIndex: PredicateWithIndex! + fileprivate let _source: Observable + fileprivate let _predicate: Predicate! + fileprivate let _predicateWithIndex: PredicateWithIndex! init(source: Observable, predicate: Predicate) { _source = source @@ -118,7 +118,7 @@ class TakeWhile: Producer { _predicateWithIndex = predicate } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Element { if let _ = _predicate { let sink = TakeWhileSink(parent: self, observer: observer) sink.disposable = _source.subscribe(sink) diff --git a/RxSwift/Observables/Implementations/Throttle.swift b/RxSwift/Observables/Implementations/Throttle.swift index 598b6089..59947468 100644 --- a/RxSwift/Observables/Implementations/Throttle.swift +++ b/RxSwift/Observables/Implementations/Throttle.swift @@ -95,7 +95,7 @@ class Throttle : Producer { _scheduler = scheduler } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Element { let sink = ThrottleSink(parent: self, observer: observer) sink.disposable = sink.run() return sink diff --git a/RxSwift/Observables/Implementations/Timeout.swift b/RxSwift/Observables/Implementations/Timeout.swift index 26531b41..65d0d23a 100644 --- a/RxSwift/Observables/Implementations/Timeout.swift +++ b/RxSwift/Observables/Implementations/Timeout.swift @@ -8,7 +8,7 @@ import Foundation -class TimeoutSink: Sink, LockOwnerType, ObserverType { +class TimeoutSink: Sink, LockOwnerType, ObserverType where O.E == ElementType { typealias E = ElementType typealias Parent = Timeout @@ -112,7 +112,7 @@ class Timeout : Producer { _scheduler = scheduler } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Element { let sink = TimeoutSink(parent: self, observer: observer) sink.disposable = sink.run() return sink diff --git a/RxSwift/Observables/Implementations/Timer.swift b/RxSwift/Observables/Implementations/Timer.swift index bdfd81d5..077fc8bb 100644 --- a/RxSwift/Observables/Implementations/Timer.swift +++ b/RxSwift/Observables/Implementations/Timer.swift @@ -8,7 +8,7 @@ import Foundation -class TimerSink : Sink { +class TimerSink : Sink where O.E : SignedInteger { typealias Parent = Timer private let _parent: Parent @@ -26,7 +26,7 @@ class TimerSink : Sink { } } -class TimerOneOffSink : Sink { +class TimerOneOffSink : Sink where O.E : SignedInteger { typealias Parent = Timer private let _parent: Parent @@ -47,9 +47,9 @@ class TimerOneOffSink : Sink { } class Timer: Producer { - private let _scheduler: SchedulerType - private let _dueTime: RxTimeInterval - private let _period: RxTimeInterval? + fileprivate let _scheduler: SchedulerType + fileprivate let _dueTime: RxTimeInterval + fileprivate let _period: RxTimeInterval? init(dueTime: RxTimeInterval, period: RxTimeInterval?, scheduler: SchedulerType) { _scheduler = scheduler @@ -57,7 +57,7 @@ class Timer: Producer { _period = period } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == E { if let _ = _period { let sink = TimerSink(parent: self, observer: observer) sink.disposable = sink.run() diff --git a/RxSwift/Observables/Implementations/ToArray.swift b/RxSwift/Observables/Implementations/ToArray.swift index 46754bcb..1ecd1285 100644 --- a/RxSwift/Observables/Implementations/ToArray.swift +++ b/RxSwift/Observables/Implementations/ToArray.swift @@ -8,7 +8,7 @@ import Foundation -class ToArraySink : Sink, ObserverType { +class ToArraySink : Sink, ObserverType where O.E == [SourceType] { typealias Parent = ToArray let _parent: Parent @@ -42,7 +42,7 @@ class ToArray : Producer<[SourceType]> { _source = source } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == [SourceType] { let sink = ToArraySink(parent: self, observer: observer) sink.disposable = _source.subscribe(sink) return sink diff --git a/RxSwift/Observables/Implementations/Using.swift b/RxSwift/Observables/Implementations/Using.swift index 11c2f254..a2d68971 100644 --- a/RxSwift/Observables/Implementations/Using.swift +++ b/RxSwift/Observables/Implementations/Using.swift @@ -8,7 +8,7 @@ import Foundation -class UsingSink : Sink, ObserverType { +class UsingSink : Sink, ObserverType where O.E == SourceType { typealias Parent = Using typealias E = O.E @@ -61,8 +61,8 @@ class Using: Producer { typealias ResourceFactory = () throws -> ResourceType typealias ObservableFactory = (ResourceType) throws -> Observable - private let _resourceFactory: ResourceFactory - private let _observableFactory: ObservableFactory + fileprivate let _resourceFactory: ResourceFactory + fileprivate let _observableFactory: ObservableFactory init(resourceFactory: ResourceFactory, observableFactory: ObservableFactory) { @@ -70,7 +70,7 @@ class Using: Producer { _observableFactory = observableFactory } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == E { let sink = UsingSink(parent: self, observer: observer) sink.disposable = sink.run() return sink diff --git a/RxSwift/Observables/Implementations/Window.swift b/RxSwift/Observables/Implementations/Window.swift index 09deb542..83482730 100644 --- a/RxSwift/Observables/Implementations/Window.swift +++ b/RxSwift/Observables/Implementations/Window.swift @@ -8,11 +8,11 @@ import Foundation -class WindowTimeCountSink> +class WindowTimeCountSink : Sink , ObserverType , LockOwnerType - , SynchronizedOnType { + , SynchronizedOnType where O.E == Observable { typealias Parent = WindowTimeCount typealias E = Element @@ -144,7 +144,7 @@ class WindowTimeCount : Producer> { _scheduler = scheduler } - override func run>(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == Observable { let sink = WindowTimeCountSink(parent: self, observer: observer) sink.disposable = sink.run() return sink diff --git a/RxSwift/Observables/Implementations/WithLatestFrom.swift b/RxSwift/Observables/Implementations/WithLatestFrom.swift index 9f5f50cf..8217acf6 100644 --- a/RxSwift/Observables/Implementations/WithLatestFrom.swift +++ b/RxSwift/Observables/Implementations/WithLatestFrom.swift @@ -8,19 +8,19 @@ import Foundation -class WithLatestFromSink +class WithLatestFromSink : Sink , ObserverType , LockOwnerType - , SynchronizedOnType { + , SynchronizedOnType where O.E == ResultType { typealias Parent = WithLatestFrom typealias E = FirstType - private let _parent: Parent + fileprivate let _parent: Parent var _lock = NSRecursiveLock() - private var _latest: SecondType? + fileprivate var _latest: SecondType? init(parent: Parent, observer: O) { _parent = parent @@ -64,10 +64,10 @@ class WithLatestFromSink +class WithLatestFromSecond : ObserverType , LockOwnerType - , SynchronizedOnType { + , SynchronizedOnType where O.E == ResultType { typealias Parent = WithLatestFromSink typealias E = SecondType @@ -104,9 +104,9 @@ class WithLatestFromSecond: Producer { typealias ResultSelector = (FirstType, SecondType) throws -> ResultType - private let _first: Observable - private let _second: Observable - private let _resultSelector: ResultSelector + fileprivate let _first: Observable + fileprivate let _second: Observable + fileprivate let _resultSelector: ResultSelector init(first: Observable, second: Observable, resultSelector: ResultSelector) { _first = first @@ -114,7 +114,7 @@ class WithLatestFrom: Producer { _resultSelector = resultSelector } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == ResultType { let sink = WithLatestFromSink(parent: self, observer: observer) sink.disposable = sink.run() return sink diff --git a/RxSwift/Observables/Implementations/Zip+CollectionType.swift b/RxSwift/Observables/Implementations/Zip+CollectionType.swift index 38d0cc4b..788a52cd 100644 --- a/RxSwift/Observables/Implementations/Zip+CollectionType.swift +++ b/RxSwift/Observables/Implementations/Zip+CollectionType.swift @@ -8,8 +8,8 @@ import Foundation -class ZipCollectionTypeSink - : Sink { +class ZipCollectionTypeSink + : Sink where C.Iterator.Element : ObservableConvertibleType, O.E == R { typealias Parent = ZipCollectionType typealias SourceElement = C.Iterator.Element.E @@ -116,7 +116,7 @@ class ZipCollectionTypeSink : Producer { +class ZipCollectionType : Producer where C.Iterator.Element : ObservableConvertibleType { typealias ResultSelector = ([C.Iterator.Element.E]) throws -> R let sources: C @@ -129,7 +129,7 @@ class ZipCollectionType(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == R { let sink = ZipCollectionTypeSink(parent: self, observer: observer) sink.disposable = sink.run() return sink diff --git a/RxSwift/Observables/Implementations/Zip+arity.swift b/RxSwift/Observables/Implementations/Zip+arity.swift index 124e05c7..d9bd1dbb 100644 --- a/RxSwift/Observables/Implementations/Zip+arity.swift +++ b/RxSwift/Observables/Implementations/Zip+arity.swift @@ -95,7 +95,7 @@ class Zip2 : Producer { _resultSelector = resultSelector } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == R { let sink = ZipSink2_(parent: self, observer: observer) sink.disposable = sink.run() return sink @@ -196,7 +196,7 @@ class Zip3 : Producer { _resultSelector = resultSelector } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == R { let sink = ZipSink3_(parent: self, observer: observer) sink.disposable = sink.run() return sink @@ -305,7 +305,7 @@ class Zip4 : Producer { _resultSelector = resultSelector } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == R { let sink = ZipSink4_(parent: self, observer: observer) sink.disposable = sink.run() return sink @@ -422,7 +422,7 @@ class Zip5 : Producer { _resultSelector = resultSelector } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == R { let sink = ZipSink5_(parent: self, observer: observer) sink.disposable = sink.run() return sink @@ -547,7 +547,7 @@ class Zip6 : Producer { _resultSelector = resultSelector } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == R { let sink = ZipSink6_(parent: self, observer: observer) sink.disposable = sink.run() return sink @@ -680,7 +680,7 @@ class Zip7 : Producer { _resultSelector = resultSelector } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == R { let sink = ZipSink7_(parent: self, observer: observer) sink.disposable = sink.run() return sink @@ -821,7 +821,7 @@ class Zip8 : Producer { _resultSelector = resultSelector } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == R { let sink = ZipSink8_(parent: self, observer: observer) sink.disposable = sink.run() return sink diff --git a/RxSwift/Observables/Implementations/Zip+arity.tt b/RxSwift/Observables/Implementations/Zip+arity.tt index 9af1dc7d..3b3542ab 100644 --- a/RxSwift/Observables/Implementations/Zip+arity.tt +++ b/RxSwift/Observables/Implementations/Zip+arity.tt @@ -97,7 +97,7 @@ class Zip<%= i %><<%= (Array(1...i).map { "E\($0)" }).joined(separator: ", ") %> _resultSelector = resultSelector } - override func run(_ observer: O) -> Disposable { + override func run(_ observer: O) -> Disposable where O.E == R { let sink = ZipSink<%= i %>_(parent: self, observer: observer) sink.disposable = sink.run() return sink diff --git a/RxSwift/Observables/Observable+Binding.swift b/RxSwift/Observables/Observable+Binding.swift index 134825a7..ef7c9f3b 100644 --- a/RxSwift/Observables/Observable+Binding.swift +++ b/RxSwift/Observables/Observable+Binding.swift @@ -25,8 +25,8 @@ extension ObservableType { - returns: A connectable observable sequence that upon connection causes the source sequence to push results into the specified subject. */ // @warn_unused_result(message:"http://git.io/rxs.uo") - public func multicast(_ subject: S) - -> ConnectableObservable { + public func multicast(_ subject: S) + -> ConnectableObservable where S.SubjectObserverType.E == E { return ConnectableObservableAdapter(source: self.asObservable(), subject: subject) } @@ -44,8 +44,8 @@ extension ObservableType { - returns: An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ // @warn_unused_result(message:"http://git.io/rxs.uo") - public func multicast(_ subjectSelector: () throws -> S, selector: (Observable) throws -> Observable) - -> Observable { + public func multicast(_ subjectSelector: () throws -> S, selector: (Observable) throws -> Observable) + -> Observable where S.SubjectObserverType.E == E { return Multicast( source: self.asObservable(), subjectSelector: subjectSelector, diff --git a/RxSwift/Observables/Observable+Creation.swift b/RxSwift/Observables/Observable+Creation.swift index 9f30dfc9..781db73b 100644 --- a/RxSwift/Observables/Observable+Creation.swift +++ b/RxSwift/Observables/Observable+Creation.swift @@ -20,7 +20,7 @@ extension Observable { - returns: The observable sequence with the specified implementation for the `subscribe` method. */ // @warn_unused_result(message:"http://git.io/rxs.uo") - public static func create(_ subscribe: (AnyObserver) -> Disposable) -> Observable { + public static func create(_ subscribe: @escaping (AnyObserver) -> Disposable) -> Observable { return AnonymousObservable(subscribe) } @@ -114,7 +114,7 @@ extension Observable { - 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: () throws -> Observable) + public static func deferred(_ observableFactory: @escaping () throws -> Observable) -> Observable { return Deferred(observableFactory: observableFactory) } @@ -160,7 +160,7 @@ extension Observable { - returns: An observable sequence whose lifetime controls the lifetime of the dependent resource object. */ // @warn_unused_result(message:"http://git.io/rxs.uo") - public static func using(_ resourceFactory: () throws -> R, observableFactory: (R) throws -> Observable) -> Observable { + public static func using(_ resourceFactory: @escaping () throws -> R, observableFactory: @escaping (R) throws -> Observable) -> Observable { return Using(resourceFactory: resourceFactory, observableFactory: observableFactory) } } @@ -231,7 +231,7 @@ extension Observable { - returns: The observable sequence whose elements are pulled from the given enumerable sequence. */ - public static func from(_ sequence: S, scheduler: ImmediateSchedulerType = CurrentThreadScheduler.instance) -> Observable { + public static func from(_ sequence: S, scheduler: ImmediateSchedulerType = CurrentThreadScheduler.instance) -> Observable where S.Iterator.Element == E { return ObservableSequence(elements: sequence, scheduler: scheduler) } } diff --git a/RxSwift/Observables/Observable+Multiple.swift b/RxSwift/Observables/Observable+Multiple.swift index 8bf90f3d..3e520e7f 100644 --- a/RxSwift/Observables/Observable+Multiple.swift +++ b/RxSwift/Observables/Observable+Multiple.swift @@ -78,7 +78,7 @@ extension ObservableType { - returns: An observable sequence that contains the elements of `self`, followed by those of the second sequence. */ // @warn_unused_result(message:"http://git.io/rxs.uo") - public func concat(_ second: O) -> Observable { + public func concat(_ second: O) -> Observable where O.E == E { return [self.asObservable(), second.asObservable()].concat() } } @@ -139,7 +139,7 @@ extension ObservableType where E : ObservableConvertibleType { */ // @warn_unused_result(message:"http://git.io/rxs.uo") public func concat() -> Observable { - return merge(maxConcurrent: 1) + return merge(1) } } @@ -168,7 +168,7 @@ extension ObservableType where E : ObservableConvertibleType { - 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) + public func merge(_ maxConcurrent: Int) -> Observable { return MergeLimited(source: asObservable(), maxConcurrent: maxConcurrent) } @@ -274,9 +274,9 @@ extension ObservableType { - returns: An observable sequence that surfaces either of the given sequences, whichever reacted first. */ // @warn_unused_result(message:"http://git.io/rxs.uo") - public func amb + public func amb (_ right: O2) - -> Observable { + -> Observable where O2.E == E { return Amb(left: asObservable(), right: right.asObservable()) } } diff --git a/RxSwift/Observables/Observable+Single.swift b/RxSwift/Observables/Observable+Single.swift index f2493acd..ebf1d139 100644 --- a/RxSwift/Observables/Observable+Single.swift +++ b/RxSwift/Observables/Observable+Single.swift @@ -50,7 +50,7 @@ extension ObservableType { - 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) throws -> Bool) + public func distinctUntilChanged(_ comparer: (E, E) throws -> Bool) -> Observable { return self.distinctUntilChanged({ $0 }, comparer: comparer) } @@ -65,7 +65,7 @@ extension ObservableType { - 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(_ keySelector: (E) throws -> K, comparer: (lhs: K, rhs: K) throws -> Bool) + public func distinctUntilChanged(_ keySelector: (E) throws -> K, comparer: (K, K) throws -> Bool) -> Observable { return DistinctUntilChanged(source: self.asObservable(), selector: keySelector, comparer: comparer) } diff --git a/RxSwift/Observables/Observable+Time.swift b/RxSwift/Observables/Observable+Time.swift index 2b604037..fdd9b4af 100644 --- a/RxSwift/Observables/Observable+Time.swift +++ b/RxSwift/Observables/Observable+Time.swift @@ -267,8 +267,8 @@ extension ObservableType { - returns: The source sequence switching to the other sequence in case of a timeout. */ // @warn_unused_result(message:"http://git.io/rxs.uo") - public func timeout(_ dueTime: RxTimeInterval, other: O, scheduler: SchedulerType) - -> Observable { + public func timeout(_ dueTime: RxTimeInterval, other: O, scheduler: SchedulerType) + -> Observable where E == O.E { return Timeout(source: self.asObservable(), dueTime: dueTime, other: other.asObservable(), scheduler: scheduler) } } diff --git a/RxSwift/Observers/TailRecursiveSink.swift b/RxSwift/Observers/TailRecursiveSink.swift index caf3e2e7..1d1c8bc2 100644 --- a/RxSwift/Observers/TailRecursiveSink.swift +++ b/RxSwift/Observers/TailRecursiveSink.swift @@ -18,9 +18,9 @@ enum TailRecursiveSinkCommand { #endif /// This class is usually used with `Generator` version of the operators. -class TailRecursiveSink +class TailRecursiveSink : Sink - , InvocableWithValueType { + , InvocableWithValueType where S.Iterator.Element: ObservableConvertibleType, S.Iterator.Element.E == O.E { typealias Value = TailRecursiveSinkCommand typealias E = O.E typealias SequenceGenerator = (generator: S.Iterator, remaining: IntMax?) diff --git a/RxSwift/Rx.swift b/RxSwift/Rx.swift index 865b3df9..eff87faf 100644 --- a/RxSwift/Rx.swift +++ b/RxSwift/Rx.swift @@ -14,11 +14,11 @@ public var resourceCount: AtomicInt = 0 #endif /// Swift does not implement abstract methods. This method is used as a runtime check to ensure that methods which intended to be abstract (i.e., they should be implemented in subclasses) are not called directly on the superclass. -@noreturn func abstractMethod() -> Void { +func abstractMethod() -> Never { rxFatalError("Abstract method") } -@noreturn func rxFatalError(_ lastMessage: String) { +func rxFatalError(_ lastMessage: String) -> Never { // The temptation to comment this line is great, but please don't, it's for your own good. The choice is yours. fatalError(lastMessage) } diff --git a/RxSwift/SchedulerType.swift b/RxSwift/SchedulerType.swift index b45e6e72..cb6f373a 100644 --- a/RxSwift/SchedulerType.swift +++ b/RxSwift/SchedulerType.swift @@ -68,7 +68,7 @@ extension SchedulerType { return schedule.start() } - func scheduleRecursive(_ state: State, dueTime: RxTimeInterval, action: (state: State, scheduler: AnyRecursiveScheduler) -> ()) -> Disposable { + func scheduleRecursive(_ state: State, dueTime: RxTimeInterval, action: (State, AnyRecursiveScheduler) -> ()) -> Disposable { let scheduler = AnyRecursiveScheduler(scheduler: self, action: action) scheduler.schedule(state, dueTime: dueTime) diff --git a/RxSwift/Schedulers/ConcurrentDispatchQueueScheduler.swift b/RxSwift/Schedulers/ConcurrentDispatchQueueScheduler.swift index 08c7bfa4..4507a191 100644 --- a/RxSwift/Schedulers/ConcurrentDispatchQueueScheduler.swift +++ b/RxSwift/Schedulers/ConcurrentDispatchQueueScheduler.swift @@ -13,11 +13,11 @@ Abstracts the work that needs to be performed on a specific `dispatch_queue_t`. This scheduler is suitable when some work needs to be performed in background. */ -public class ConcurrentDispatchQueueScheduler: SchedulerType { +open class ConcurrentDispatchQueueScheduler: SchedulerType { public typealias TimeInterval = Foundation.TimeInterval public typealias Time = Date - public var now : Date { + open var now : Date { return Date() } @@ -81,7 +81,7 @@ public class ConcurrentDispatchQueueScheduler: SchedulerType { - parameter action: Action to be executed. - returns: The disposable object used to cancel the scheduled action (best effort). */ - public func schedulePeriodic(_ state: StateType, startAfter: TimeInterval, period: TimeInterval, action: (StateType) -> StateType) -> Disposable { + open func schedulePeriodic(_ state: StateType, startAfter: TimeInterval, period: TimeInterval, action: (StateType) -> StateType) -> Disposable { return self.configuration.schedulePeriodic(state, startAfter: startAfter, period: period, action: action) } } diff --git a/RxSwift/Schedulers/ConcurrentMainScheduler.swift b/RxSwift/Schedulers/ConcurrentMainScheduler.swift index 1846ca62..5898bf2b 100644 --- a/RxSwift/Schedulers/ConcurrentMainScheduler.swift +++ b/RxSwift/Schedulers/ConcurrentMainScheduler.swift @@ -45,7 +45,7 @@ public final class ConcurrentMainScheduler : SchedulerType { - parameter action: Action to be executed. - returns: The disposable object used to cancel the scheduled action (best effort). */ - public func schedule(_ state: StateType, action: (StateType) -> Disposable) -> Disposable { + public func schedule(_ state: StateType, action: @escaping (StateType) -> Disposable) -> Disposable { if Thread.current.isMainThread { return action(state) } diff --git a/RxSwift/Schedulers/CurrentThreadScheduler.swift b/RxSwift/Schedulers/CurrentThreadScheduler.swift index 4558b4cb..dc8fc379 100644 --- a/RxSwift/Schedulers/CurrentThreadScheduler.swift +++ b/RxSwift/Schedulers/CurrentThreadScheduler.swift @@ -64,13 +64,13 @@ This is the default scheduler for operators that generate elements. This scheduler is also sometimes called `trampoline scheduler`. */ -public class CurrentThreadScheduler : ImmediateSchedulerType { +open class CurrentThreadScheduler : ImmediateSchedulerType { typealias ScheduleQueue = RxMutableBox> /** The singleton instance of the current thread scheduler. */ - public static let instance = CurrentThreadScheduler() + open static let instance = CurrentThreadScheduler() static var queue : ScheduleQueue? { get { @@ -84,7 +84,7 @@ public class CurrentThreadScheduler : ImmediateSchedulerType { /** Gets a value that indicates whether the caller must call a `schedule` method. */ - public static private(set) var isScheduleRequired: Bool { + open static fileprivate(set) var isScheduleRequired: Bool { get { let value: CurrentThreadSchedulerValue? = Thread.getThreadLocalStorageValueForKey(CurrentThreadSchedulerKeyInstance as NSString) return value == nil @@ -104,7 +104,7 @@ public class CurrentThreadScheduler : ImmediateSchedulerType { - parameter action: Action to be executed. - returns: The disposable object used to cancel the scheduled action (best effort). */ - public func schedule(_ state: StateType, action: (StateType) -> Disposable) -> Disposable { + open func schedule(_ state: StateType, action: (StateType) -> Disposable) -> Disposable { if CurrentThreadScheduler.isScheduleRequired { CurrentThreadScheduler.isScheduleRequired = false diff --git a/RxSwift/Schedulers/Internal/AnonymousInvocable.swift b/RxSwift/Schedulers/Internal/AnonymousInvocable.swift index 8525db45..e74d8811 100644 --- a/RxSwift/Schedulers/Internal/AnonymousInvocable.swift +++ b/RxSwift/Schedulers/Internal/AnonymousInvocable.swift @@ -11,11 +11,11 @@ import Foundation struct AnonymousInvocable : InvocableType { private let _action: () -> () - init(_ action: () -> ()) { + init(_ action: @escaping () -> ()) { _action = action } func invoke() { _action() } -} \ No newline at end of file +} diff --git a/RxSwift/Schedulers/Internal/DispatchQueueConfiguration.swift b/RxSwift/Schedulers/Internal/DispatchQueueConfiguration.swift index 061b6c7c..c90447d6 100644 --- a/RxSwift/Schedulers/Internal/DispatchQueueConfiguration.swift +++ b/RxSwift/Schedulers/Internal/DispatchQueueConfiguration.swift @@ -21,7 +21,7 @@ private func dispatchInterval(_ interval: Foundation.TimeInterval) -> DispatchTi } extension DispatchQueueConfiguration { - func schedule(_ state: StateType, action: (StateType) -> Disposable) -> Disposable { + func schedule(_ state: StateType, action: @escaping (StateType) -> Disposable) -> Disposable { let cancel = SingleAssignmentDisposable() queue.async { @@ -36,7 +36,7 @@ extension DispatchQueueConfiguration { return cancel } - func scheduleRelative(_ state: StateType, dueTime: Foundation.TimeInterval, action: (StateType) -> Disposable) -> Disposable { + func scheduleRelative(_ state: StateType, dueTime: Foundation.TimeInterval, action: @escaping (StateType) -> Disposable) -> Disposable { let deadline = DispatchTime.now() + dispatchInterval(dueTime) let compositeDisposable = CompositeDisposable() @@ -70,7 +70,7 @@ extension DispatchQueueConfiguration { return compositeDisposable } - func schedulePeriodic(_ state: StateType, startAfter: TimeInterval, period: TimeInterval, action: (StateType) -> StateType) -> Disposable { + func schedulePeriodic(_ state: StateType, startAfter: TimeInterval, period: TimeInterval, action: @escaping (StateType) -> StateType) -> Disposable { let initial = DispatchTime.now() + dispatchInterval(startAfter) var timerState = state diff --git a/RxSwift/Schedulers/MainScheduler.swift b/RxSwift/Schedulers/MainScheduler.swift index adc62211..be4ec6a8 100644 --- a/RxSwift/Schedulers/MainScheduler.swift +++ b/RxSwift/Schedulers/MainScheduler.swift @@ -49,7 +49,7 @@ public final class MainScheduler : SerialDispatchQueueScheduler { } } - override func scheduleInternal(_ state: StateType, action: (StateType) -> Disposable) -> Disposable { + override func scheduleInternal(_ state: StateType, action: @escaping (StateType) -> Disposable) -> Disposable { let currentNumberEnqueued = AtomicIncrement(&numberEnqueued) if Thread.current.isMainThread && currentNumberEnqueued == 1 { diff --git a/RxSwift/Schedulers/OperationQueueScheduler.swift b/RxSwift/Schedulers/OperationQueueScheduler.swift index 6c979393..89b00d48 100644 --- a/RxSwift/Schedulers/OperationQueueScheduler.swift +++ b/RxSwift/Schedulers/OperationQueueScheduler.swift @@ -13,8 +13,8 @@ Abstracts the work that needs to be performed on a specific `NSOperationQueue`. This scheduler is suitable for cases when there is some bigger chunk of work that needs to be performed in background and you want to fine tune concurrent processing using `maxConcurrentOperationCount`. */ -public class OperationQueueScheduler: ImmediateSchedulerType { - public let operationQueue: OperationQueue +open class OperationQueueScheduler: ImmediateSchedulerType { + open let operationQueue: OperationQueue /** Constructs new instance of `OperationQueueScheduler` that performs work on `operationQueue`. @@ -32,7 +32,7 @@ public class OperationQueueScheduler: 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 schedule(_ state: StateType, action: (StateType) -> Disposable) -> Disposable { + open func schedule(_ state: StateType, action: @escaping (StateType) -> Disposable) -> Disposable { let compositeDisposable = CompositeDisposable() diff --git a/RxSwift/Schedulers/RecursiveScheduler.swift b/RxSwift/Schedulers/RecursiveScheduler.swift index fad09306..0276fed2 100644 --- a/RxSwift/Schedulers/RecursiveScheduler.swift +++ b/RxSwift/Schedulers/RecursiveScheduler.swift @@ -12,7 +12,7 @@ import Foundation Type erased recursive scheduler. */ class AnyRecursiveScheduler { - typealias Action = (state: State, scheduler: AnyRecursiveScheduler) -> Void + typealias Action = (State, AnyRecursiveScheduler) -> Void private let _lock = NSRecursiveLock() @@ -57,7 +57,7 @@ class AnyRecursiveScheduler { } if let action = action { - action(state: state, scheduler: self) + action(state, self) } return Disposables.create() @@ -100,7 +100,7 @@ class AnyRecursiveScheduler { } if let action = action { - action(state: state, scheduler: self) + action(state, self) } return Disposables.create() @@ -126,7 +126,7 @@ class AnyRecursiveScheduler { Type erased recursive scheduler. */ class RecursiveImmediateScheduler { - typealias Action = (state: State, recurse: (State) -> Void) -> Void + typealias Action = (_ state: State, _ recurse: (State) -> Void) -> Void private var _lock = SpinLock() private let _group = CompositeDisposable() @@ -170,7 +170,7 @@ class RecursiveImmediateScheduler { } if let action = action { - action(state: state, recurse: self.schedule) + action(state, self.schedule) } return Disposables.create() diff --git a/RxSwift/Schedulers/SerialDispatchQueueScheduler.swift b/RxSwift/Schedulers/SerialDispatchQueueScheduler.swift index 09ae70a6..7d5fe4b8 100644 --- a/RxSwift/Schedulers/SerialDispatchQueueScheduler.swift +++ b/RxSwift/Schedulers/SerialDispatchQueueScheduler.swift @@ -25,14 +25,14 @@ In case some customization need to be made on it before usage, internal serial queue can be customized using `serialQueueConfiguration` callback. */ -public class SerialDispatchQueueScheduler : SchedulerType { +open class SerialDispatchQueueScheduler : SchedulerType { public typealias TimeInterval = Foundation.TimeInterval public typealias Time = Date /** - returns: Current time. */ - public var now : Date { + open var now : Date { return Date() } @@ -118,7 +118,7 @@ public class SerialDispatchQueueScheduler : SchedulerType { - parameter action: Action to be executed. - returns: The disposable object used to cancel the scheduled action (best effort). */ - public func schedulePeriodic(_ state: StateType, startAfter: TimeInterval, period: TimeInterval, action: (StateType) -> StateType) -> Disposable { + open func schedulePeriodic(_ state: StateType, startAfter: TimeInterval, period: TimeInterval, action: (StateType) -> StateType) -> Disposable { return self.configuration.schedulePeriodic(state, startAfter: startAfter, period: period, action: action) } } diff --git a/RxSwift/Schedulers/VirtualTimeScheduler.swift b/RxSwift/Schedulers/VirtualTimeScheduler.swift index baefc975..80e763f2 100644 --- a/RxSwift/Schedulers/VirtualTimeScheduler.swift +++ b/RxSwift/Schedulers/VirtualTimeScheduler.swift @@ -11,7 +11,7 @@ import Foundation /** Base class for virtual time schedulers using a priority queue for scheduled items. */ -public class VirtualTimeScheduler +open class VirtualTimeScheduler : SchedulerType , CustomDebugStringConvertible { @@ -30,14 +30,14 @@ public class VirtualTimeScheduler /** - returns: Current time. */ - public var now: RxTime { + open var now: RxTime { return _converter.convertFromVirtualTime(clock) } /** - returns: Scheduler's absolute time clock value. */ - public var clock: VirtualTime { + open var clock: VirtualTime { return _clock } @@ -72,7 +72,7 @@ public class VirtualTimeScheduler - parameter action: Action to be executed. - returns: The disposable object used to cancel the scheduled action (best effort). */ - public func schedule(_ state: StateType, action: (StateType) -> Disposable) -> Disposable { + open func schedule(_ state: StateType, action: (StateType) -> Disposable) -> Disposable { return self.scheduleRelative(state, dueTime: 0.0) { a in return action(a) } @@ -86,7 +86,7 @@ public class VirtualTimeScheduler - parameter action: Action to be executed. - returns: The disposable object used to cancel the scheduled action (best effort). */ - public func scheduleRelative(_ state: StateType, dueTime: RxTimeInterval, action: (StateType) -> Disposable) -> Disposable { + open func scheduleRelative(_ state: StateType, dueTime: RxTimeInterval, action: (StateType) -> Disposable) -> Disposable { let time = self.now.addingTimeInterval(dueTime) let absoluteTime = _converter.convertToVirtualTime(time) let adjustedTime = self.adjustScheduledTime(absoluteTime) @@ -101,7 +101,7 @@ public class VirtualTimeScheduler - parameter action: Action to be executed. - returns: The disposable object used to cancel the scheduled action (best effort). */ - public func scheduleRelativeVirtual(_ state: StateType, dueTime: VirtualTimeInterval, action: (StateType) -> Disposable) -> Disposable { + open func scheduleRelativeVirtual(_ state: StateType, dueTime: VirtualTimeInterval, action: (StateType) -> Disposable) -> Disposable { let time = _converter.offsetVirtualTime(self.clock, offset: dueTime) return scheduleAbsoluteVirtual(state, time: time, action: action) } @@ -114,7 +114,7 @@ public class VirtualTimeScheduler - parameter action: Action to be executed. - returns: The disposable object used to cancel the scheduled action (best effort). */ - public func scheduleAbsoluteVirtual(_ state: StateType, time: Converter.VirtualTimeUnit, action: (StateType) -> Disposable) -> Disposable { + open func scheduleAbsoluteVirtual(_ state: StateType, time: Converter.VirtualTimeUnit, action: @escaping (StateType) -> Disposable) -> Disposable { MainScheduler.ensureExecutingOnScheduler() let compositeDisposable = CompositeDisposable() @@ -136,14 +136,14 @@ public class VirtualTimeScheduler /** Adjusts time of scheduling before adding item to schedule queue. */ - public func adjustScheduledTime(_ time: Converter.VirtualTimeUnit) -> Converter.VirtualTimeUnit { + open func adjustScheduledTime(_ time: Converter.VirtualTimeUnit) -> Converter.VirtualTimeUnit { return time } /** Starts the virtual time scheduler. */ - public func start() { + open func start() { MainScheduler.ensureExecutingOnScheduler() if _running { @@ -185,7 +185,7 @@ public class VirtualTimeScheduler - parameter virtualTime: Absolute time to advance the scheduler's clock to. */ - public func advanceTo(_ virtualTime: VirtualTime) { + open func advanceTo(_ virtualTime: VirtualTime) { MainScheduler.ensureExecutingOnScheduler() if _running { @@ -217,7 +217,7 @@ public class VirtualTimeScheduler /** Advances the scheduler's clock by the specified relative time. */ - public func sleep(_ virtualInterval: VirtualTimeInterval) { + open func sleep(_ virtualInterval: VirtualTimeInterval) { MainScheduler.ensureExecutingOnScheduler() let sleepTo = _converter.offsetVirtualTime(clock, offset: virtualInterval) @@ -231,7 +231,7 @@ public class VirtualTimeScheduler /** Stops the virtual time scheduler. */ - public func stop() { + open func stop() { MainScheduler.ensureExecutingOnScheduler() _running = false diff --git a/RxSwift/Subjects/BehaviorSubject.swift b/RxSwift/Subjects/BehaviorSubject.swift index a8191eb8..465f3ee0 100644 --- a/RxSwift/Subjects/BehaviorSubject.swift +++ b/RxSwift/Subjects/BehaviorSubject.swift @@ -106,12 +106,12 @@ public final class BehaviorSubject - parameter observer: Observer to subscribe to the subject. - returns: Disposable object that can be used to unsubscribe the observer from the subject. */ - public override func subscribe(_ observer: O) -> Disposable { + public override func subscribe(_ observer: O) -> Disposable where O.E == Element { _lock.lock(); defer { _lock.unlock() } return _synchronized_subscribe(observer) } - func _synchronized_subscribe(_ observer: O) -> Disposable { + func _synchronized_subscribe(_ observer: O) -> Disposable where O.E == E { if _isDisposed { observer.on(.error(RxError.disposed(object: self))) return Disposables.create() diff --git a/RxSwift/Subjects/PublishSubject.swift b/RxSwift/Subjects/PublishSubject.swift index aaeb74d1..5962ac56 100644 --- a/RxSwift/Subjects/PublishSubject.swift +++ b/RxSwift/Subjects/PublishSubject.swift @@ -87,12 +87,12 @@ final public class PublishSubject - parameter observer: Observer to subscribe to the subject. - returns: Disposable object that can be used to unsubscribe the observer from the subject. */ - public override func subscribe(_ observer: O) -> Disposable { + public override func subscribe(_ observer: O) -> Disposable where O.E == Element { _lock.lock(); defer { _lock.unlock() } return _synchronized_subscribe(observer) } - func _synchronized_subscribe(_ observer: O) -> Disposable { + func _synchronized_subscribe(_ observer: O) -> Disposable where O.E == E { if let stoppedEvent = _stoppedEvent { observer.on(stoppedEvent) return Disposables.create() diff --git a/RxSwift/Subjects/ReplaySubject.swift b/RxSwift/Subjects/ReplaySubject.swift index 91a7a230..4db9814e 100644 --- a/RxSwift/Subjects/ReplaySubject.swift +++ b/RxSwift/Subjects/ReplaySubject.swift @@ -13,7 +13,7 @@ Represents an object that is both an observable sequence as well as an observer. Each notification is broadcasted to all subscribed and future observers, subject to buffer trimming policies. */ -public class ReplaySubject +open class ReplaySubject : Observable , SubjectType , ObserverType @@ -23,7 +23,7 @@ public class ReplaySubject /** Indicates whether the subject has any observers */ - public var hasObservers: Bool { + open var hasObservers: Bool { _lock.lock(); defer { _lock.unlock() } return _observers.count > 0 } @@ -46,21 +46,21 @@ public class ReplaySubject - parameter event: Event to send to the observers. */ - public func on(_ event: Event) { + open func on(_ event: Event) { abstractMethod() } /** Returns observer interface for subject. */ - public func asObserver() -> SubjectObserverType { + open func asObserver() -> SubjectObserverType { return self } /** Unsubscribe all observers and release resources. */ - public func dispose() { + open func dispose() { } /** @@ -69,7 +69,7 @@ public class ReplaySubject - parameter bufferSize: Maximal number of elements to replay to observer after subscription. - returns: New instance of replay subject. */ - public static func create(bufferSize: Int) -> ReplaySubject { + open static func create(_ bufferSize: Int) -> ReplaySubject { if bufferSize == 1 { return ReplayOne() } @@ -83,7 +83,7 @@ public class ReplaySubject To avoid filling up memory, developer needs to make sure that the use case will only ever store a 'reasonable' number of elements. */ - public static func createUnbounded() -> ReplaySubject { + open static func createUnbounded() -> ReplaySubject { return ReplayAll() } } @@ -131,12 +131,12 @@ class ReplayBufferBase } } - override func subscribe(_ observer: O) -> Disposable { + override func subscribe(_ observer: O) -> Disposable where O.E == Element { _lock.lock(); defer { _lock.unlock() } return _synchronized_subscribe(observer) } - func _synchronized_subscribe(_ observer: O) -> Disposable { + func _synchronized_subscribe(_ observer: O) -> Disposable where O.E == E { if _isDisposed { observer.on(.error(RxError.disposed(object: self))) return Disposables.create() diff --git a/RxSwift/Subjects/Variable.swift b/RxSwift/Subjects/Variable.swift index 77137c1d..7122f4a0 100644 --- a/RxSwift/Subjects/Variable.swift +++ b/RxSwift/Subjects/Variable.swift @@ -14,7 +14,7 @@ Variable is a wrapper for `BehaviorSubject`. Unlike `BehaviorSubject` it can't terminate with error, and when variable is deallocated it will complete it's observable sequence (`asObservable`). */ -public class Variable { +open class Variable { public typealias E = Element @@ -32,7 +32,7 @@ public class Variable { Even if the newly set value is same as the old value, observers are still notified for change. */ - public var value: E { + open var value: E { get { _lock.lock(); defer { _lock.unlock() } return _value @@ -59,7 +59,7 @@ public class Variable { /** - returns: Canonical interface for push style sequence */ - public func asObservable() -> Observable { + open func asObservable() -> Observable { return _subject } diff --git a/RxTests/ColdObservable.swift b/RxTests/ColdObservable.swift index 6fe0f31d..8479b092 100644 --- a/RxTests/ColdObservable.swift +++ b/RxTests/ColdObservable.swift @@ -25,7 +25,7 @@ class ColdObservable /** Subscribes `observer` to receive events for this sequence. */ - override func subscribe(_ observer: O) -> Disposable { + override func subscribe(_ observer: O) -> Disposable where O.E == Element { subscriptions.append(Subscription(testScheduler.clock)) let i = self.subscriptions.count - 1 diff --git a/RxTests/HotObservable.swift b/RxTests/HotObservable.swift index d5f42eeb..7e9f70e9 100644 --- a/RxTests/HotObservable.swift +++ b/RxTests/HotObservable.swift @@ -40,7 +40,7 @@ class HotObservable /** Subscribes `observer` to receive events for this sequence. */ - override func subscribe(_ observer: O) -> Disposable { + override func subscribe(_ observer: O) -> Disposable where O.E == Element { let key = _observers.insert(AnyObserver(observer)) subscriptions.append(Subscription(self.testScheduler.clock)) diff --git a/RxTests/Schedulers/TestScheduler.swift b/RxTests/Schedulers/TestScheduler.swift index f5d3535a..74e09769 100644 --- a/RxTests/Schedulers/TestScheduler.swift +++ b/RxTests/Schedulers/TestScheduler.swift @@ -12,7 +12,7 @@ import RxSwift /** Virtual time scheduler used for testing applications and libraries built using RxSwift. */ -public class TestScheduler : VirtualTimeScheduler { +open class TestScheduler : VirtualTimeScheduler { /** Default values of scheduler times. */ @@ -52,7 +52,7 @@ public class TestScheduler : VirtualTimeScheduler(_ events: [Recorded>]) -> TestableObservable { + open func createHotObservable(_ events: [Recorded>]) -> TestableObservable { return HotObservable(testScheduler: self as AnyObject as! TestScheduler, recordedEvents: events) } @@ -62,7 +62,7 @@ public class TestScheduler : VirtualTimeScheduler(_ events: [Recorded>]) -> TestableObservable { + open func createColdObservable(_ events: [Recorded>]) -> TestableObservable { return ColdObservable(testScheduler: self as AnyObject as! TestScheduler, recordedEvents: events) } @@ -72,7 +72,7 @@ public class TestScheduler : VirtualTimeScheduler(_ type: E.Type) -> TestableObserver { + open func createObserver(_ type: E.Type) -> TestableObserver { return TestableObserver(scheduler: self as AnyObject as! TestScheduler) } @@ -81,7 +81,7 @@ public class TestScheduler : VirtualTimeScheduler Void) { + open func scheduleAt(_ time: TestTime, action: @escaping () -> Void) { _ = self.scheduleAbsoluteVirtual((), time: time, action: { () -> Disposable in action() return Disposables.create() @@ -91,7 +91,7 @@ public class TestScheduler : VirtualTimeScheduler VirtualTime { + override open func adjustScheduledTime(_ time: VirtualTime) -> VirtualTime { return time <= clock ? clock + (_simulateProcessingDelay ? 1 : 0) : time } @@ -104,7 +104,7 @@ public class TestScheduler : VirtualTimeScheduler(_ created: TestTime, subscribed: TestTime, disposed: TestTime, create: () -> Observable) -> TestableObserver { + open func start(_ created: TestTime, subscribed: TestTime, disposed: TestTime, create: () -> Observable) -> TestableObserver { var source : Observable? = nil var subscription : Disposable? = nil let observer = createObserver(Element.self) @@ -140,7 +140,7 @@ public class TestScheduler : VirtualTimeScheduler(_ disposed: TestTime, create: () -> Observable) -> TestableObserver { + open func start(_ disposed: TestTime, create: () -> Observable) -> TestableObserver { return start(Defaults.created, subscribed: Defaults.subscribed, disposed: disposed, create: create) } @@ -155,7 +155,7 @@ public class TestScheduler : VirtualTimeScheduler(_ create: () -> Observable) -> TestableObserver { + open func start(_ create: () -> Observable) -> TestableObserver { return start(Defaults.created, subscribed: Defaults.subscribed, disposed: Defaults.disposed, create: create) } } diff --git a/RxTests/TestableObservable.swift b/RxTests/TestableObservable.swift index 1087089d..bafe75e9 100644 --- a/RxTests/TestableObservable.swift +++ b/RxTests/TestableObservable.swift @@ -12,20 +12,20 @@ import RxSwift /** Observable sequence that records subscription lifetimes and timestamped events sent to observers. */ -public class TestableObservable +open class TestableObservable : ObservableType { public typealias E = Element /** Subscriptions recorded during observable lifetime. */ - public internal(set) var subscriptions: [Subscription] + open internal(set) var subscriptions: [Subscription] /** List of events to replay for all subscribers. Event times represent absolute `TestScheduler` time. */ - public internal(set) var recordedEvents: [Recorded>] + open internal(set) var recordedEvents: [Recorded>] /** Parent test scheduler. @@ -38,7 +38,7 @@ public class TestableObservable self.subscriptions = [] } - public func subscribe(_ observer: O) -> Disposable { + open func subscribe(_ observer: O) -> Disposable where O.E == Element { fatalError("Abstract method") } } diff --git a/RxTests/TestableObserver.swift b/RxTests/TestableObserver.swift index 95f7c629..1d5fedf9 100644 --- a/RxTests/TestableObserver.swift +++ b/RxTests/TestableObserver.swift @@ -12,16 +12,16 @@ import RxSwift /** Observer that records events together with virtual time when they were received. */ -public class TestableObserver +open class TestableObserver : ObserverType { public typealias Element = ElementType - private let _scheduler: TestScheduler + fileprivate let _scheduler: TestScheduler /** Recorded events. */ - public private(set) var events = [Recorded>]() + open fileprivate(set) var events = [Recorded>]() init(scheduler: TestScheduler) { _scheduler = scheduler @@ -32,7 +32,7 @@ public class TestableObserver - parameter event: Event that occured. */ - public func on(_ event: Event) { + open func on(_ event: Event) { events.append(Recorded(time: _scheduler.clock, event: event)) } } diff --git a/Tests/PerformanceTests/PerformanceTools.swift b/Tests/PerformanceTests/PerformanceTools.swift index ad100586..c7ff7515 100644 --- a/Tests/PerformanceTests/PerformanceTools.swift +++ b/Tests/PerformanceTests/PerformanceTools.swift @@ -8,12 +8,12 @@ import Foundation -var mallocFunctions: [(@convention(c) (UnsafeMutablePointer<_malloc_zone_t>?, Int) -> UnsafeMutablePointer?)] = [] +var mallocFunctions: [(@convention(c) (UnsafeMutablePointer<_malloc_zone_t>?, Int) -> UnsafeMutableRawPointer?)] = [] var allocCalls: Int64 = 0 var bytesAllocated: Int64 = 0 -func call0(_ p: UnsafeMutablePointer<_malloc_zone_t>?, size: Int) -> UnsafeMutablePointer? { +func call0(_ p: UnsafeMutablePointer<_malloc_zone_t>?, size: Int) -> UnsafeMutableRawPointer? { OSAtomicIncrement64(&allocCalls) OSAtomicAdd64(Int64(size), &bytesAllocated) #if ALLOC_HOOK @@ -22,7 +22,7 @@ func call0(_ p: UnsafeMutablePointer<_malloc_zone_t>?, size: Int) -> UnsafeMutab return mallocFunctions[0](p, size) } -func call1(_ p: UnsafeMutablePointer<_malloc_zone_t>?, size: Int) -> UnsafeMutablePointer? { +func call1(_ p: UnsafeMutablePointer<_malloc_zone_t>?, size: Int) -> UnsafeMutableRawPointer? { OSAtomicIncrement64(&allocCalls) OSAtomicAdd64(Int64(size), &bytesAllocated) #if ALLOC_HOOK @@ -31,7 +31,7 @@ func call1(_ p: UnsafeMutablePointer<_malloc_zone_t>?, size: Int) -> UnsafeMutab return mallocFunctions[1](p, size) } -func call2(_ p: UnsafeMutablePointer<_malloc_zone_t>?, size: Int) -> UnsafeMutablePointer? { +func call2(_ p: UnsafeMutablePointer<_malloc_zone_t>?, size: Int) -> UnsafeMutableRawPointer? { OSAtomicIncrement64(&allocCalls) OSAtomicAdd64(Int64(size), &bytesAllocated) #if ALLOC_HOOK @@ -40,7 +40,7 @@ func call2(_ p: UnsafeMutablePointer<_malloc_zone_t>?, size: Int) -> UnsafeMutab return mallocFunctions[2](p, size) } -var proxies: [(@convention(c) (UnsafeMutablePointer<_malloc_zone_t>?, Int) -> UnsafeMutablePointer?)] = [call0, call1, call2] +var proxies: [(@convention(c) (UnsafeMutablePointer<_malloc_zone_t>?, Int) -> UnsafeMutableRawPointer?)] = [call0, call1, call2] func getMemoryInfo() -> (bytes: Int64, allocations: Int64) { return (bytesAllocated, allocCalls) @@ -77,7 +77,7 @@ func registerMallocHooks() { mallocFunctions.append(zone.malloc) zone.malloc = proxies[i] - let protectSize = vm_size_t(sizeof(malloc_zone_t.self)) * vm_size_t(count) + let protectSize = vm_size_t(MemoryLayout.size) * vm_size_t(count) if true { let addressPointer = UnsafeMutablePointer(zoneArray) @@ -132,7 +132,7 @@ func approxValuePerIteration(_ total: UInt64) -> UInt64 { return UInt64(round(Double(total) / Double(NumberOfIterations))) } -func measureTime(_ work: @noescape () -> ()) -> UInt64 { +func measureTime(_ work: () -> ()) -> UInt64 { var timebaseInfo: mach_timebase_info = mach_timebase_info() let res = mach_timebase_info(&timebaseInfo) @@ -147,7 +147,7 @@ func measureTime(_ work: @noescape () -> ()) -> UInt64 { return approxValuePerIteration(timeInNano) / 1000 } -func measureMemoryUsage(work: @noescape () -> ()) -> (bytesAllocated: UInt64, allocations: UInt64) { +func measureMemoryUsage(work: () -> ()) -> (bytesAllocated: UInt64, allocations: UInt64) { let (bytes, allocations) = getMemoryInfo() for _ in 0 ..< NumberOfIterations { work() @@ -159,7 +159,7 @@ func measureMemoryUsage(work: @noescape () -> ()) -> (bytesAllocated: UInt64, al var fragmentedMemory = false -func compareTwoImplementations(benchmarkTime: Bool, benchmarkMemory: Bool, first: @noescape () -> (), second: @noescape () -> ()) { +func compareTwoImplementations(benchmarkTime: Bool, benchmarkMemory: Bool, first: () -> (), second: () -> ()) { if !fragmentedMemory { print("Fragmenting memory ...") fragmentMemory() @@ -193,8 +193,8 @@ func compareTwoImplementations(benchmarkTime: Bool, benchmarkMemory: Bool, first first() second() - memory1 = measureMemoryUsage(work: first) - memory2 = measureMemoryUsage(work: second) + memory1 = measureMemoryUsage(first) + memory2 = measureMemoryUsage(second) } else { memory1 = (0, 0) diff --git a/Tests/RxCocoaTests/DelegateProxyTest+UIKit.swift b/Tests/RxCocoaTests/DelegateProxyTest+UIKit.swift index 043c07d1..687bc8d4 100644 --- a/Tests/RxCocoaTests/DelegateProxyTest+UIKit.swift +++ b/Tests/RxCocoaTests/DelegateProxyTest+UIKit.swift @@ -138,7 +138,7 @@ extension DelegateProxyTest { class ExtendTableViewDelegateProxy : RxTableViewDelegateProxy , UITableViewDelegateSubclass { - weak private(set) var control: UITableViewSubclass1? + weak fileprivate(set) var control: UITableViewSubclass1? required init(parentObject: AnyObject) { self.control = (parentObject as! UITableViewSubclass1) @@ -171,7 +171,7 @@ class UITableViewSubclass1 class ExtendTableViewDataSourceProxy : RxTableViewDataSourceProxy , UITableViewDelegateSubclass { - weak private(set) var control: UITableViewSubclass2? + weak fileprivate(set) var control: UITableViewSubclass2? required init(parentObject: AnyObject) { self.control = (parentObject as! UITableViewSubclass2) @@ -204,7 +204,7 @@ class UITableViewSubclass2 class ExtendCollectionViewDelegateProxy : RxCollectionViewDelegateProxy , UITableViewDelegateSubclass { - weak private(set) var control: UICollectionViewSubclass1? + weak fileprivate(set) var control: UICollectionViewSubclass1? required init(parentObject: AnyObject) { self.control = (parentObject as! UICollectionViewSubclass1) @@ -237,7 +237,7 @@ class UICollectionViewSubclass1 class ExtendCollectionViewDataSourceProxy : RxCollectionViewDataSourceProxy , UICollectionViewDelegateSubclass { - weak private(set) var control: UICollectionViewSubclass2? + weak fileprivate(set) var control: UICollectionViewSubclass2? required init(parentObject: AnyObject) { self.control = (parentObject as! UICollectionViewSubclass2) @@ -270,7 +270,7 @@ class UICollectionViewSubclass2 class ExtendScrollViewDelegateProxy : RxScrollViewDelegateProxy , UIScrollViewDelegateSubclass { - weak private(set) var control: UIScrollViewSubclass? + weak fileprivate(set) var control: UIScrollViewSubclass? required init(parentObject: AnyObject) { self.control = (parentObject as! UIScrollViewSubclass) @@ -304,7 +304,7 @@ class UIScrollViewSubclass class ExtendSearchBarDelegateProxy : RxSearchBarDelegateProxy , UISearchBarDelegateSubclass { - weak private(set) var control: UISearchBarSubclass? + weak fileprivate(set) var control: UISearchBarSubclass? required init(parentObject: AnyObject) { self.control = (parentObject as! UISearchBarSubclass) @@ -339,7 +339,7 @@ class UISearchBarSubclass class ExtendTextViewDelegateProxy : RxTextViewDelegateProxy , UITextViewDelegateSubclass { - weak private(set) var control: UITextViewSubclass? + weak fileprivate(set) var control: UITextViewSubclass? required init(parentObject: AnyObject) { self.control = (parentObject as! UITextViewSubclass) diff --git a/Tests/RxCocoaTests/RuntimeStateSnapshot.swift b/Tests/RxCocoaTests/RuntimeStateSnapshot.swift index 286025de..58543b3e 100644 --- a/Tests/RxCocoaTests/RuntimeStateSnapshot.swift +++ b/Tests/RxCocoaTests/RuntimeStateSnapshot.swift @@ -14,12 +14,12 @@ class ObjectRuntimeState { let actingAs: ClassRuntimeState init(target: AnyObject) { - assert(object_getClass(target) == target.dynamicType) + assert(object_getClass(target) == type(of: target)) real = ClassRuntimeState(object_getClass(target)) actingAs = ClassRuntimeState(RXObjCTestRuntime.objCClass(target)) } - private static func changesFrom(_ from: ClassRuntimeState, to: ClassRuntimeState) -> [ObjectRuntimeChange] { + fileprivate static func changesFrom(_ from: ClassRuntimeState, to: ClassRuntimeState) -> [ObjectRuntimeChange] { if from.targetClass == to.targetClass { var changes = [ObjectRuntimeChange]() for (selector, implementation) in to.implementations { diff --git a/Tests/RxCocoaTests/RxTest+Controls.swift b/Tests/RxCocoaTests/RxTest+Controls.swift index b7c884eb..d4ce0e33 100644 --- a/Tests/RxCocoaTests/RxTest+Controls.swift +++ b/Tests/RxCocoaTests/RxTest+Controls.swift @@ -12,7 +12,7 @@ import RxSwift import XCTest extension RxTest { - func ensurePropertyDeallocated(_ createControl: () -> C, _ initialValue: T, _ propertySelector: (C) -> ControlProperty) { + func ensurePropertyDeallocated(_ createControl: () -> C, _ initialValue: T, _ propertySelector: (C) -> ControlProperty) where C: NSObject { let variable = Variable(initialValue) @@ -58,11 +58,11 @@ extension RxTest { XCTAssertEqual(initialValue, lastReturnedPropertyValue) } - func ensureEventDeallocated(_ createControl: () -> C, _ eventSelector: (C) -> ControlEvent) { + func ensureEventDeallocated(_ createControl: @escaping () -> C, _ eventSelector: (C) -> ControlEvent) where C: NSObject { return ensureEventDeallocated({ () -> (C, Disposable) in (createControl(), Disposables.create()) }, eventSelector) } - func ensureEventDeallocated(_ createControl: () -> (C, Disposable), _ eventSelector: (C) -> ControlEvent) { + func ensureEventDeallocated(_ createControl: () -> (C, Disposable), _ eventSelector: (C) -> ControlEvent) where C: NSObject { var completed = false var deallocated = false let outerDisposable = SingleAssignmentDisposable() @@ -89,7 +89,7 @@ extension RxTest { XCTAssertTrue(completed) } - func ensureControlObserverHasWeakReference( _ createControl: @autoclosure() -> (C), _ observerSelector: (C) -> AnyObserver, _ observableSelector: () -> (Observable)) { + func ensureControlObserverHasWeakReference( _ createControl: @autoclosure() -> (C), _ observerSelector: (C) -> AnyObserver, _ observableSelector: () -> (Observable)) where C: NSObject { var deallocated = false let disposeBag = DisposeBag() diff --git a/Tests/RxSwiftTests/TestImplementations/Mocks/BackgroundThreadPrimitiveHotObservable.swift b/Tests/RxSwiftTests/TestImplementations/Mocks/BackgroundThreadPrimitiveHotObservable.swift index e624e9cd..0057d51b 100644 --- a/Tests/RxSwiftTests/TestImplementations/Mocks/BackgroundThreadPrimitiveHotObservable.swift +++ b/Tests/RxSwiftTests/TestImplementations/Mocks/BackgroundThreadPrimitiveHotObservable.swift @@ -11,7 +11,7 @@ import RxSwift import XCTest class BackgroundThreadPrimitiveHotObservable : PrimitiveHotObservable { - override func subscribe(_ observer: O) -> Disposable { + override func subscribe(_ observer: O) -> Disposable where O.E == E { XCTAssertTrue(!isMainThread()) return super.subscribe(observer) } diff --git a/Tests/RxSwiftTests/TestImplementations/Mocks/MainThreadPrimitiveHotObservable.swift b/Tests/RxSwiftTests/TestImplementations/Mocks/MainThreadPrimitiveHotObservable.swift index 916bdd50..74153846 100644 --- a/Tests/RxSwiftTests/TestImplementations/Mocks/MainThreadPrimitiveHotObservable.swift +++ b/Tests/RxSwiftTests/TestImplementations/Mocks/MainThreadPrimitiveHotObservable.swift @@ -11,7 +11,7 @@ import RxSwift import XCTest class MainThreadPrimitiveHotObservable : PrimitiveHotObservable { - override func subscribe(_ observer: O) -> Disposable { + override func subscribe(_ observer: O) -> Disposable where O.E == E { XCTAssertTrue(isMainThread()) return super.subscribe(observer) } diff --git a/Tests/RxSwiftTests/TestImplementations/Mocks/MockDisposable.swift b/Tests/RxSwiftTests/TestImplementations/Mocks/MockDisposable.swift index 390f3f66..cc392b40 100644 --- a/Tests/RxSwiftTests/TestImplementations/Mocks/MockDisposable.swift +++ b/Tests/RxSwiftTests/TestImplementations/Mocks/MockDisposable.swift @@ -23,4 +23,4 @@ class MockDisposable : Disposable func dispose() { ticks.append(_scheduler.clock) } -} \ No newline at end of file +} diff --git a/Tests/RxSwiftTests/TestImplementations/Mocks/MySubject.swift b/Tests/RxSwiftTests/TestImplementations/Mocks/MySubject.swift index c2baf761..16f97c87 100644 --- a/Tests/RxSwiftTests/TestImplementations/Mocks/MySubject.swift +++ b/Tests/RxSwiftTests/TestImplementations/Mocks/MySubject.swift @@ -9,7 +9,7 @@ import Foundation import RxSwift -class MySubject : SubjectType, ObserverType { +class MySubject : SubjectType, ObserverType where Element : Hashable { typealias E = Element typealias SubjectObserverType = MySubject @@ -41,7 +41,7 @@ class MySubject : SubjectType, ObserverType { } } - func subscribe(_ observer: O) -> Disposable { + func subscribe(_ observer: O) -> Disposable where O.E == E { _subscribeCount += 1 _observer = AnyObserver(observer) diff --git a/Tests/RxSwiftTests/TestImplementations/Mocks/PrimitiveHotObservable.swift b/Tests/RxSwiftTests/TestImplementations/Mocks/PrimitiveHotObservable.swift index e5b57c96..0784cd9b 100644 --- a/Tests/RxSwiftTests/TestImplementations/Mocks/PrimitiveHotObservable.swift +++ b/Tests/RxSwiftTests/TestImplementations/Mocks/PrimitiveHotObservable.swift @@ -35,7 +35,7 @@ class PrimitiveHotObservable : ObservableType { observers.on(event) } - func subscribe(_ observer: O) -> Disposable { + func subscribe(_ observer: O) -> Disposable where O.E == E { lock.lock() defer { lock.unlock() } diff --git a/Tests/RxSwiftTests/TestImplementations/Mocks/TestConnectableObservable.swift b/Tests/RxSwiftTests/TestImplementations/Mocks/TestConnectableObservable.swift index 19e6b71b..2e0e5845 100644 --- a/Tests/RxSwiftTests/TestImplementations/Mocks/TestConnectableObservable.swift +++ b/Tests/RxSwiftTests/TestImplementations/Mocks/TestConnectableObservable.swift @@ -9,7 +9,7 @@ import Foundation import RxSwift -class TestConnectableObservable : ConnectableObservableType { +class TestConnectableObservable : ConnectableObservableType where S.E == S.SubjectObserverType.E { typealias E = S.E let _o: ConnectableObservable @@ -22,7 +22,7 @@ class TestConnectableObservable(_ observer: O) -> Disposable { + func subscribe(_ observer: O) -> Disposable where O.E == E { return _o.subscribe(observer) } } diff --git a/Tests/RxSwiftTests/Tests/Observable+ConcurrencyTest.swift b/Tests/RxSwiftTests/Tests/Observable+ConcurrencyTest.swift index 95cb80df..00d6e711 100644 --- a/Tests/RxSwiftTests/Tests/Observable+ConcurrencyTest.swift +++ b/Tests/RxSwiftTests/Tests/Observable+ConcurrencyTest.swift @@ -32,12 +32,12 @@ class ObservableConcurrencyTest : ObservableConcurrencyTestBase { // observeOn serial scheduler extension ObservableConcurrencyTest { - func runDispatchQueueSchedulerTests(_ tests: (scheduler: SerialDispatchQueueScheduler) -> Disposable) { + func runDispatchQueueSchedulerTests(_ tests: (SerialDispatchQueueScheduler) -> Disposable) { let scheduler = SerialDispatchQueueScheduler(internalSerialQueueName: "testQueue1") runDispatchQueueSchedulerTests(scheduler, tests: tests).dispose() } - func runDispatchQueueSchedulerTests(_ scheduler: SerialDispatchQueueScheduler, tests: (scheduler: SerialDispatchQueueScheduler) -> Disposable) -> Disposable { + func runDispatchQueueSchedulerTests(_ scheduler: SerialDispatchQueueScheduler, tests: (SerialDispatchQueueScheduler) -> Disposable) -> Disposable { // simplest possible solution, even though it has horrible efficiency in this case probably let disposable = tests(scheduler: scheduler) let expectation = self.expectation(description: "Wait for all tests to complete") @@ -54,7 +54,7 @@ extension ObservableConcurrencyTest { return disposable } - func runDispatchQueueSchedulerMultiplexedTests(_ tests: [(scheduler: SerialDispatchQueueScheduler) -> Disposable]) { + func runDispatchQueueSchedulerMultiplexedTests(_ tests: [(SerialDispatchQueueScheduler) -> Disposable]) { let scheduler = SerialDispatchQueueScheduler(internalSerialQueueName: "testQueue1") let compositeDisposable = CompositeDisposable() diff --git a/Tests/RxTest.swift b/Tests/RxTest.swift index b88edb84..6f0937c6 100644 --- a/Tests/RxTest.swift +++ b/Tests/RxTest.swift @@ -33,7 +33,7 @@ class RxTest var allTests : [(String, () throws -> Void)] = [] #endif - private var startResourceCount: Int32 = 0 + fileprivate var startResourceCount: Int32 = 0 var accumulateStatistics: Bool { return true diff --git a/Tests/Tests/XCTest+AllTests.swift b/Tests/Tests/XCTest+AllTests.swift index 4954b5c0..fe2851ee 100644 --- a/Tests/Tests/XCTest+AllTests.swift +++ b/Tests/Tests/XCTest+AllTests.swift @@ -64,10 +64,10 @@ func XCTAssertEqual(_ lhs: [T], _ rhs: [T], _ comparison: (T, T) -> Bool) { } -func doOnBackgroundThread(_ action: () -> ()) { +func doOnBackgroundThread(_ action: @escaping () -> ()) { DispatchQueue.global(qos: .default).async(execute: action) } -func doOnMainThread(_ action: () -> ()) { +func doOnMainThread(_ action: @escaping () -> ()) { DispatchQueue.main.async(execute: action) }