All notable changes to this project will be documented in this file.
3.0.0.alpha.1 (Xcode 8 beta 6 compatible 8S201h)
- Modernizes API to be more consistent with Swift 3.0 API Design Guidelines
- Replaces
rx_*
prefix withrx.*
extensions. (Inspired by.lazy
collections API). We've tried annotate deprecated APIs with@available(*, deprecated, renamed: "new method")
but trivial replacements aren't annotated.rx_text
->rx.text
rx_tap
->rx.tap
rx_date
->rx.date
- ...
- Deprecates
subscribeNext
,subscribeError
,subscribeCompleted
in favor ofsubscribe(onNext:onError:onCompleted:onDisposed)
(The downsides of old extensions were inconsistencies with Swift API guidelines. They also weren't expressing that calling them actually performes additional subscriptions and thus potentially additional work beside just registering observers). - Deprecates
doOnNext
,doOnCompleted
,doOnError
in favor ofdo(onNext:onCompleted:onError:onSubscribe:onDisposed:)
- Adds
onSubscribe
andonDisposed
todo
operator. - Adds namespace for immutable disposables called
Disposables
- Deprecates
AnonymousDisposable
in favor ofDisposables.create(with:)
- Deprecates
NopDisposable
in favor ofDisposables.create()
- Deprecates
BinaryDisposable
in favor ofDisposables.create(_:_:)
- Deprecates
- Deprecates
toObservable
in favor ofObservable.from()
. - Replaces old javascript automation tests with Swift UI Tests.
- ...
- There is a problem using
UISwitch
extensions because it seems that a bug exists in UIKit that causes allUISwitch
instances to leak. ReactiveX#842
- Adds Swift 2.3 compatibility.
- Adds
UIViewController.rx_title
extension. - Adds
UIScrollView.rx_scrollEnabled
extension. - Resolve static analysis issues relating to non-use of an assigned value, and potential null dereferences in RxCocoa's Objective-C classes.
- Changes
forwardDelegate
property type onDelegateProxy
fromassign
toweak
. - Simplifies UITable/CollectionView data source generic parameters.
- Adds simple usage examples to UITable/CollectionView data source extensions.
- Documents UITable/CollectionView data source extensions memory management and adds unit tests to cover that documentation.
- Adds
.jazzy.yml
- Adds
UITabBar
extensions and delegate proxy wrapper- rx_didSelectItem
- rx_willBeginCustomizing
- rx_didBeginCustomizing
- rx_willEndCustomizing
- rx_didEndCustomizing
- Adds
UIPickerView
delegate proxy and extensions:- rx_itemSelected
- Adds
UIAlertAction.rx_enabled
extension. - Adds
UIButton.rx_title(controlState: UIControlState = .Normal)
extension. - Adds
UIPageControl.rx_currentPage
extension. - Adds
hasObservers
property to*Subject
.
- Fixes problem with UITable/CollectionView releasing of data sources when result subscription disposable wasn't retained.
- Fixes all Xcode analyzer warnings
- Exposes
installForwardDelegate
. - Adds
proxyForObject
as protocol extension and deprecates global function version. - Improves
installForwardDelegate
assert messaging. - Improves gesture recognizer extensions to use typed gesture recognizers in
rx_event
. - Adds
RxTextInput
protocol to enable creating reactive extensions forUITextInput/NSTextInput
. - Adds
rx_willDisplayCell
andrx_didEndDisplayingCell
extensions toUITableView
. - Improves playgrounds.
- Fixes in documentation.
- Turns off Bitcode for
RxTests
CocoaPods integration. - Fixes
UITextField.rx_text
andUITextView.rx_text
integrations to be more robust when used with two way binding. - Fixes two way binding example code so it now properly handles IME used in Asian cultures and adds explanations how to properly perform two way bindings. ReactiveX#649
- Removes
distinctUntilChanged
from control extensions. ReactiveX#626
- adds
Driver.drive
withVariable
parameter. - exposes
RxSearchBarDelegateProxy
- adds
rx_cancelButtonClicked
toUISearchBar
. - adds
rx_searchButtonClicked
toUISearchBar
. - adds
UISearchController
extensions:rx_didDismiss
rx_didPresent
rx_present
rx_willDismiss
rx_willPresent
- Fixes anomaly with
multicast
disposing subscription. - Small grammar fixes in code.
- Fixes in documentation.
- Xcode 7.3 / Swift 2.2 support
- Adds
rx_badgeValue
toUITabBarItem
. - Adds
rx_progress
toUIProgresView
. - Adds
rx_selectedScopeButtonIndex
toUISearchBar
. - Adds
asyncInstance
toMainScheduler
. - Makes
name
parmeter optional forrx_notification
extension. - Adds
UnitTests.md
. - Adds
Tips.md
. - Updates playground inline documentation with running instructions.
- Synchronizes copy of
RxDataSources
source files inside example project to0.6
release.
- Fixes anomaly with synchronization in disposable setter of
SingleAssignmentDisposable
. - Improves
DelegateProxy
memory management. - Fixes anomaly during two way binding of
UITextView
text value. - Improves
single
operator so it handles reentrancy better.
- Fixes problem with
timer
operator. Changes return type fromObservable<Int64>
toObservable<T>
. This could potentially cause code breakage, but it was an API anomaly. - Curried functions were marked deprecated so they were replaced in
UITableView
andUICollectionView
extensions with equivalent lambdas. This shouldn't break anyone's code, but it is a change in public interface.
This is example of those changes:
- public func rx_itemsWithCellFactory<S : Sequence, O : ObservableType where O.E == S>
(source: O)
(cellFactory: (UITableView, Int, S.Iterator.Element) -> UITableViewCell) -> Disposable
+ public func rx_itemsWithCellFactory<S : Sequence, O : ObservableType where O.E == S>
(source: O)
-> (cellFactory: (UITableView, Int, S.Iterator.Element) -> UITableViewCell) -> Disposable
- Fixes anomaly in
CLLocationManager
extensions
- public var rx_didFinishDeferredUpdatesWithError: RxSwift.Observable<NSError> { get }
+ public var rx_didFinishDeferredUpdatesWithError: RxSwift.Observable<NSError?> { get }
- Adds
UIBindingObserver
. - Adds
doOnNext
convenience operator (also added toDriver
). - Adds
doOnError
convenience operator. - Adds
doOnCompleted
convenience operator (also added toDriver
). - Adds
skip
,startWith
toDriver
. - Adds
rx_active
extension toNSLayoutConstraint
. - Adds
rx_refreshing
extension toUIRefreshControl
. - Adds
interval
andtimer
toDriver
. - Adds
rx_itemAccessoryButtonTapped
toUITableView
extensions. - Adds
rx_networkActivityIndicatorVisible
toUIApplication
. - Adds
rx_selected
toUIControl
.
- Fixes anomaly with registering multiple observers to
UIBarButtonItem
. - Fixes anomaly with blocking operators possibly over-stopping the
RunLoop
.
- Adds
UIImagePickerController
delegate wrappers. - Adds
SectionedViewDataSourceType
that enables third party data sources to use existingrx_modelSelected
/rx_modelDeselected
wrappers. - Adds
rx_modelDeselected
toUITableView
- Adds
rx_itemDeselected
toUITableView
- Adds
rx_modelDeselected
toUICollectionView
- Adds
rx_itemDeselected
toUICollectionView
- Adds
rx_state
toNSButton
- Adds
rx_enabled
toNSControl
- Adds
UIImagePickerController
usage example to Example app.
- Removes usage of
OSSpinLock
s from allDarwin
platforms because of problems with inversion of priority on iOS. Original thread on swift mailing list is here - Reduces verbose output from
RxCocoa
project in debug mode.TRACE_RESOURCES
is now also treated as a verbosity level setting. It is possible to get old output by usingTRACE_RESOURCES
with verbosity level>= 2
. #397 - Fixes anomaly with logging of HTTP body of requests in
RxCocoa
project.
- Changes package names to
io.rx.[library]
- Packages data sources from
RxDataSourceStarterKit
into it's own repository RxDataSources underRxSwiftCommunity
. - Removes deprecated APIs.
- Replaces hacky code that solved anomaly caused by interaction between autocorrect and text controls notification mechanism with proper solution. #333
- Adds generic
public func rx_sentMessage(selector: Selector) -> Observable<[AnyObject]>
that enables observing of messages sent to any object. (This is enabled if DISABLE_SWIZZLING isn't set).- use cases like
cell.rx_sentMessage("prepareForReuse")
are now supported.
- use cases like
- Linux support (proof of concept, but single threaded mode works)
- more info in Documentation/Linux.md
- Initial support for
Swift Package Manager
- works on
Linux
(RxSwift
,RxBlocking
,RxTests
) - doesn't work on OSX because it can't compile
RxCocoa
andRxTests
(because of inclusion ofXCTest
extensions), but OSX has two other package managers and manual method. - Project content is linked to
Sources
automagically using custom tool - more info in Documentation/Linux.md
- works on
- Adds
VirtualTimeScheduler
toRxSwift
- Adds
HistoricalScheduler
toRxSwift
- Improves performance of virtual schedulers using priority queue.
- Adds new
RxTests
library to enable testing of custom Rx operators. This library contains everything needed to write unit tests in the following way:
func testMap() {
let scheduler = TestScheduler(initialClock: 0)
let xs = scheduler.createHotObservable([
next(150, 1),
next(210, 0),
next(220, 1),
next(230, 2),
next(240, 4),
completed(300)
])
let res = scheduler.start { xs.map { $0 * 2 } }
let correctEvents = [
next(210, 0 * 2),
next(220, 1 * 2),
next(230, 2 * 2),
next(240, 4 * 2),
completed(300)
]
let correctSubscriptions = [
Subscription(200, 300)
]
XCTAssertEqual(res.events, correctEvents)
XCTAssertEqual(xs.subscriptions, correctSubscriptions)
}
- Adds test project for
RxExample-iOS
that demonstrates how to easily write marble tests usingRxTests
project.
let (
usernameEvents,
passwordEvents,
repeatedPasswordEvents,
loginTapEvents,
expectedValidatedUsernameEvents,
expectedSignupEnabledEvents
) = (
scheduler.parseEventsAndTimes("e---u1----u2-----u3-----------------", values: stringValues).first!,
scheduler.parseEventsAndTimes("e----------------------p1-----------", values: stringValues).first!,
scheduler.parseEventsAndTimes("e---------------------------p2---p1-", values: stringValues).first!,
scheduler.parseEventsAndTimes("------------------------------------", values: events).first!,
scheduler.parseEventsAndTimes("e---v--f--v--f---v--o----------------", values: validations).first!,
scheduler.parseEventsAndTimes("f--------------------------------t---", values: booleans).first!
)
- Adds example app for GitHub signup example that shows the same example written with and without
Driver
. - Documents idea behind units and
Driver
inUnits.md
. - Example of table view with editing is polished to use more functional approach.
- Adds
deferred
toDriver
unit. - Removes implicitly unwrapped optionals from
CLLocationManager
extensions. - Removes implicitly unwrapped optionals from
NSURLSession
extensions. - Polishes the
debug
operator format. - Adds optional
cellType
parameter to Table/Collection viewrx_itemsWithCellIdentifier
method. - Polish for calculator example in
RxExample
app. - Documents and adds unit tests for tail recursive optimizations of
concat
operator. - Moves
Event
equality operator toRxTests
project. - Adds
seealso
references toreactivex.io
. - Polishes headers in source files and adds tests to enforce standard header format.
- Adds
driveOnScheduler
to enable scheduler mocking forDriver
during unit tests. - Adds assertions to
drive*
family of functions that makes sure they are always called from main thread. - Refactoring and polishing of internal ObjC runtime interception architecture.
-
Changes
ConnectableObservable
, generic argument is now type of elements in observable sequence and not type of underlying subject. (BREAKING CHANGE) -
Removes
RxBox
andRxMutable
box from public interface. (BREAKING CHANGE) -
SchedulerType
now isn't parametrized onTime
andTimeInterval
. -
Deprecates
Variable
implementingObservableType
in favor ofasObservable()
.- Now variable also sends
.Completed
to observable sequence returned fromasObservable
when deallocated. If you were (mis)using variable to return single value... you can just useVariable(1).map { x in ... }
just
operatorObservable.just(1).map { x in ... }
- Now variable also sends
-
Deprecates free functions in favor of
Observable
factory methods, and deprecates versions of operators with hidden external parameters (scheduler, count) in favor of ones with explicit parameter names. E.g.Observable.just(1)
instead ofjust(1)
Observable.empty()
instead ofempty()
Observable.error()
instead offailWith()
Observable.of(1, 2, 3)
instead ofsequenceOf(1, 2, 3)
.debounce(0.2, scheduler: MainScheduler.sharedInstance)
instead of.debounce(0.2, MainScheduler.sharedInstance)
Observable.range(start:0, count: 10)
instead ofrange(0, 10)
Observable.generate(initialState: 0, condition: { $0 < 10 }) { $0 + 1 }
instead ofgenerate(0, condition: { $0 < 10 }) { $0 + 1 }
Observable<Int>.interval(1, scheduler: MainScheduler.sharedInstance)
instead ofinterval(1, MainScheduler.sharedInstance)
...
If you want to continue using free functions form, you can define your free function aliases for
Observable
factory methods (basically copy deprecated methods). -
Deprecates
UIAlertView
extensions.- These extensions could be stored locally if needed.
-
Deprecates
UIActionSheet
extensions.- These extensions could be stored locally if needed.
-
Deprecates
rx_controlEvents
in favor ofrx_controlEvent
. -
Deprecates
MainScheduler.sharedInstance
in favor ofMainScheduler.instance
-
Deprecates
ConcurrentMainScheduler.sharedInstance
in favor ofConcurrentMainScheduler.instance
-
Deprecates factory methods from
Drive
in favor ofDriver
factory methods. -
Deprecates
sampleLatest
in favor ofwithLatestFrom
. -
Deprecates
ScopedDisposable
andscopedDispose()
in favor ofDisposeBag
.
- Improves and documents resource leak code in
RxExample
. - Replaces
unowned
reference withweak
references inRxCocoa
project. - Fixes
debug
operator not using__FILE__
and__LINE__
properly. - Fixes anomaly with
timeout
operator. - Fixes problem with spell-checker and
UIText*
losing focus.
- Adds
ignoreElements
operator. - Adds
timeout
operator (2 overloads). - Adds
shareReplayLatestWhileConnected
operator. - Changes
Driver
to internally useshareReplayLatestWhileConnected
for subscription sharing instead ofshareReplay(1)
. - Adds
flatMapFirst
toDriver
unit. - Adds
replayAll
operator. - Adds
createUnbounded
factory method toReplaySubject
. - Adds optional type hints to
empty
,failWith
andnever
(empty(Int)
now works and means empty observable sequence ofInt
s). - Adds
rx_hidden
toUIView
. - Adds
rx_alpha
toUIView
. - Adds
rx_attributedText
toUILabel
. - Adds
rx_animating
toUIActivityIndicatorView
. - Adds
rx_constant
toNSLayoutConstraint
. - Removes implicitly unwrapped optional from
NSURLSession.rx_response
. - Exposes
rx_createDataSourceProxy
,rx_createDelegateProxy
onUITableView
/UICollectionView
. - Exposes
rx_createDelegateProxy
onUITextView
. - Exposes
rx_createDelegateProxy
onUIScrollView
. - Exposes
RxCollectionViewDataSourceProxy
. - Exposes
RxCollectionViewDelegateProxy
. - Exposes
RxScrollViewDelegateProxy
. - Exposes
RxTableViewDataSourceProxy
. - Exposes
RxTableViewDelegateProxy
. - Deprecates
proxyForObject
in favor ofproxyForObject<P : DelegateProxyType>(type: P.Type, _ object: AnyObject) -> P
. - Deprecates
rx_modelSelected<T>()
in favor ofrx_modelSelected<T>(modelType: T.Type)
. - Adds
func bindTo(variable: Variable<E>) -> Disposable
extension toObservableType
. - Exposes
ControlEvent
init. - Exposes
ControlProperty
init. - Refactoring of example app
- Divides examples into sections
- Adds really simple examples of how to do simple calculated bindings with vanilla Rx.
- Adds really simple examples of table view extensions (sectioned and non sectioned version).
- Refactoring of
GitHub sign in example
to use MVVM paradigm.
- Fixes documentation for
flatMapFirst
- Fixes problem with delegate proxies not detecting all delegate methods in delegate proxy hierarchy.
- Improves KVO mechanism.
- Type of observed object is now first argument
view.rx_observe(CGRect.self, "frame")
- Support for observing ObjC bridged enums and
RawRepresentable
protocol - Support for easier extending of KVO using
KVORepresentable
protocol - Deprecates KVO extensions that don't accept type as first argument in favor of ones that do.
- Type of observed object is now first argument
- Adds
flatMapLatest
(also added toDriver
unit). - Adds
flatMapFirst
operator (also added toDriver
unit). - Adds
retryWhen
operator. - Adds
window
operator. - Adds
single
operator. - Adds
single
(blocking version) operator. - Adds
rx_primaryAction
onUIButton
fortvOS
. - Transforms error types in
RxSwift
/RxCocoa
projects fromNSError
s to Swift enum types.RxError
RxCocoaError
RxCocoaURLError
- ...
NSURLSession
extensions now returnObservable<(NSData!, NSHTTPURLResponse)>
instead ofObservable<(NSData!, NSURLResponse!)>
.- Optimizes consecutive map operators. For example
map(validate1).map(validate2).map(parse)
is now internally optimized to onemap
operator. - Adds overloads for
just
,sequenceOf
,toObservable
that accept scheduler. - Deprecates
asObservable
extension ofSequence
in favor oftoObservable
. - Adds
toObservable
extension toArray
. - Improves table view animated data source example.
- Polishing of
RxDataSourceStarterKit
differentiateForSectionedView
operatorrx_itemsAnimatedWithDataSource
extension
- Makes blocking operators run current thread's runloop while blocking and thus disabling deadlocks.
- Fixes example with
Variable
in playgrounds so it less confusing regarding memory management. - Fixes
UIImageView
extensions to useUIImage?
instead ofUIImage!
. - Fixes improper usage of
CustomStringConvertible
and replaces it withCustomDebugStringConvertible
.
- Optimizations. System now performs significantly fewer allocations and is several times faster then 2.0.0-beta.1
- Makes
AnonymousObservable
private in favor ofcreate
method. - Adds
toArray
operator (non blocking version). - Adds
withLatestFrom
operator, and also extendsDriver
with that operation. - Adds
elementAt
operator (non blocking version). - Adds
takeLast
operator. - Improves
RxExample
app. Adds retries example when network becomes available again. - Adds composite extensions to
Bag
(on
,disposeAllIn
). - Renames mistyped extension on
ObserverType
fromonComplete
toonCompleted
.
- Fixes minimal platform version in OSX version of library to 10.9
- Adds
Driver
unit. This unit uses Swift compiler to prove certain properties about observable sequences. Specifically- that fallback error handling is put in place
- results are observed on main thread
- work is performed only when there is a need (at least one subscriber)
- computation results are shared between different observers (replay latest element)
- Renames
ObserverOf
toAnyObserver
. - Adds new interface
ObservableConvertibleType
. - Adds
BlockingObservable
toRxBlocking
and makes it more consistent withRxJava
. - Renames
func subscribe(next:error:completed:disposed:)
tofunc subscribe(onNext:onError:onCompleted:onDisposed:)
- Adds concat convenience method
public func concat<O : ObservableConvertibleType where O.E == E>(second: O) -> RxSwift.Observable<Self.E>
- Adds
skipUntil
operator. - Adds
takeWhile
operator. - Renames
takeWhile
indexed version totakeWhileWithIndex
- Adds
skipWhile
operator. - Adds
skipWhileWithIndex
operator. - Adds
using
operator. - Renames
func doOn(next:error:completed:)
tofunc doOn(onNext:onError:onCompleted:)
. - Makes
RecursiveImmediateSchedulerOf
private. - Makes
RecursiveSchedulerOf
private. - Adds
ConcurrentMainScheduler
. - Adds overflow error so now in case of overflow, operators will return
RxErrorCode.Overflow
. - Adds
rx_modelAtIndexPath
toUITableView
andUICollectionView
. - Adds
var rx_didUpdateFocusInContextWithAnimationCoordinator: ControlEvent<(context:animationCoordinator:)>
toUITableView
andUICollectionView
- Makes
resultSelector
argument incombineLatest
explicitfunc combineLatest<O1, O2, R>(source1: O1, _ source2: O2, resultSelector: (O1.E, O2.E) throws -> R) -> RxSwift.Observable<R>
. - Makes
resultSelector
argument inzip
explicitfunc combineLatest<O1, O2, R>(source1: O1, _ source2: O2, resultSelector: (O1.E, O2.E) throws -> R) -> RxSwift.Observable<R>
. - Adds activity indicator example in
RxExample
app. - Adds two way binding example in
RxExample
app. - many other small features
- Problem with xcodebuild 7.0.1 treating tvOS shared schemes as osx schemes.
- Adds
tvOS
support - Adds
watchOS
support - Adds auto loading example to example app
- Restores old
Variable
behavior. Variable doesn't send anything on dealloc. - Adds performance tests target.
- Adds more detailed resource tracing during unit tests (important for further optimizations).
- Adds
UIStepper
extensions. - Adds
UIBarButtonItem
enabled property wrapper. - Adds response data to userInfo of error for
rx_response
extensions ofNSURLSession
. - Adds
onNext
,onError
andonCompleted
convenience methods toObserverType
.
- Fixes problem on some systems with unregistering
CurrentThreadScheduler
from current thread. - Fixes retry parameter naming (
maxAttemptCount
). - Fixes a lot of unit test warnings.
- Removes embedding of Swift library with built frameworks.
- Renames
ImmediateScheduler
protocol toImmediateSchedulerType
- Renames
Scheduler
protocol toSchedulerType
- Adds
CurrentThreadScheduler
- Adds
generate
operator - Cleanup of dead observer code.
- Removes
SpinLock
s in disposables in favor of more performantOSAtomicCompareAndSwap32
. - Adds
buffer
operator (version with time and count). - Adds
range
operator. - Adds
repeat
operator.
- Renames
ScopedDispose
toScopedDisposable
- Deprecates
observeSingleOn
in favor ofobserveOn
- Adds inline documentation
- Renames
from
toasObservable
extension method onSequence
- Renames
catchErrorResumeNext
in favor ofcatchErrorJustReturn
- Deprecates
catchErrorToResult
, the preferred way is to use Swiftdo/try/catch
mechanism. - Deprecates
RxResult
, the preferred way is to use Swiftdo/try/catch
mechanism. - Deprecates
sendNext
onVariable
in favor of just usingvalue
setter. - Renames
rx_searchText
torx_text
onUISearchBar+Rx
. - Changes parameter type for
rx_imageAnimated
to be transitionType (kCATransitionFade, kCATransitionMoveIn, ...).
- Problem in RxExample with missing
observeOn
for images.
- Removes deprecated APIs
- Adds
ObservableType
- Moved from using
>-
operator to protocol extensions - Change from
disposeBag.addDisposable
todisposable.addDisposableTo
- Changes in RxCocoa extensions to enable fluent style
- Rename of
do*
todoOn*
- Deprecates
returnElement
in favor ofjust
- Deprecates
aggregate
in favor ofreduce
- Deprecates
variable
in favor ofshareReplay(1)
(to be consistent with RxJS version) - Method
next
onVariable
in favor ofsendNext
- Adds Calculator example app
- Performance improvements for Queue
- Crash in
rx_didChangeAuthorizationStatus
. #89