Swiftpack.co - Package - ReactiveX/RxSwift

Miss Electric Eel 2016 RxSwift: ReactiveX for Swift

Build Status platforms pod Carthage compatible Swift Package Manager compatible

Rx is a generic abstraction of computation expressed through Observable<Element> interface.

This is a Swift version of Rx.

It tries to port as many concepts from the original version as possible, but some concepts were adapted for more pleasant and performant integration with iOS/macOS environment.

Cross platform documentation can be found on ReactiveX.io.

Like the original Rx, its intention is to enable easy composition of asynchronous operations and event/data streams.

KVO observing, async operations and streams are all unified under abstraction of sequence. This is the reason why Rx is so simple, elegant and powerful.

I came here because I want to ...

... understand
... install
... hack around
... interact
... compare
... understand the structure

RxSwift comprises five separate components depending on each other in the following way:

┌──────────────┐    ┌──────────────┐
│   RxCocoa    ├────▶   RxRelay    │
└───────┬──────┘    └──────┬───────┘
        │                  │        
│             RxSwift              │
        │                  │        
┌───────┴──────┐    ┌──────┴───────┐
│    RxTest    │    │  RxBlocking  │
└──────────────┘    └──────────────┘
  • RxSwift: The core of RxSwift, providing the Rx standard as (mostly) defined by ReactiveX. It has no other dependencies.
  • RxCocoa: Provides Cocoa-specific capabilities for general iOS/macOS/watchOS & tvOS app development, such as Shared Sequences, Traits, and much more. It depends on both RxSwift and RxRelay.
  • RxRelay: Provides PublishRelay, BehaviorRelay and ReplayRelay, three simple wrappers around Subjects. It depends on RxSwift.
  • RxTest and RxBlocking: Provides testing capabilities for Rx-based systems. It depends on RxSwift.
... find compatible
... see the broader vision
  • Does this exist for Android? RxJava
  • Where is all of this going, what is the future, what about reactive architectures, how do you design entire apps this way? Cycle.js - this is javascript, but RxJS is javascript version of Rx.


Here's an example In Action
Define search for GitHub repositories ...
let searchResults = searchBar.rx.text.orEmpty
    .throttle(.milliseconds(300), scheduler: MainScheduler.instance)
    .flatMapLatest { query -> Observable<[Repository]> in
        if query.isEmpty {
            return .just([])
        return searchGitHub(query)
... then bind the results to your tableview
    .bind(to: tableView.rx.items(cellIdentifier: "Cell")) {
        (index, repository: Repository, cell) in
        cell.textLabel?.text = repository.name
        cell.detailTextLabel?.text = repository.url
    .disposed(by: disposeBag)


  • Xcode 12.x
  • Swift 5.x

For Xcode 11 and below, use RxSwift 5.x.


RxSwift doesn't contain any external dependencies.

These are currently the supported installation options:


Open Rx.xcworkspace, choose RxExample and hit run. This method will build everything and run the sample app


# Podfile

target 'YOUR_TARGET_NAME' do
    pod 'RxSwift', '6.0.0-rc.1'
    pod 'RxCocoa', '6.0.0-rc.1'

# RxTest and RxBlocking make the most sense in the context of unit/integration tests
    pod 'RxBlocking', '6.0.0-rc.1'
    pod 'RxTest', '6.0.0-rc.1'

Replace YOUR_TARGET_NAME and then, in the Podfile directory, type:

$ pod install


Officially supported: Carthage 0.33 and up.

Add this to Cartfile

github "ReactiveX/RxSwift" '6.0.0-rc.1'
$ carthage update

Carthage as a Static Library

Carthage defaults to building RxSwift as a Dynamic Library.

If you wish to build RxSwift as a Static Library using Carthage you may use the script below to manually modify the framework type before building with Carthage:

carthage update RxSwift --platform iOS --no-build
sed -i -e 's/MACH_O_TYPE = mh_dylib/MACH_O_TYPE = staticlib/g' Carthage/Checkouts/RxSwift/Rx.xcodeproj/project.pbxproj
carthage build RxSwift --platform iOS

Swift Package Manager

Note: There is a critical cross-dependency bug affecting many projects including RxSwift in Swift Package Manager. We've filed a bug (SR-12303) in early 2020 but have eno answer yet. Your mileage may vary.

Create a Package.swift file.

// swift-tools-version:5.0

import PackageDescription

let package = Package(
  name: "RxTestProject",
  dependencies: [
    .package(url: "https://github.com/ReactiveX/RxSwift.git", .exact("6.0.0-rc.1"))
  targets: [
    .target(name: "RxTestProject", dependencies: ["RxSwift", "RxCocoa"])
$ swift build

To build or test a module with RxTest dependency, set TEST=1.

$ TEST=1 swift test

Manually using git submodules

  • Add RxSwift as a submodule
$ git submodule add git@github.com:ReactiveX/RxSwift.git
  • Drag Rx.xcodeproj into Project Navigator
  • Go to Project > Targets > Build Phases > Link Binary With Libraries, click + and select RxSwift, RxCocoa and RxRelay targets



Stars: 19186


Used By

Total: 0


6.0.0 RC1 - 2020-10-06 18:44:33

RxSwift 6.0.0 RC1

This is the first Release Candidate of RxSwift 6.

Note: RxSwift 6 supports Xcode 12 and Swift 5.3 and has a minimum deployment target of iOS 9.

  • All ReactiveCompatible objects (.rx namespace) get Binders for all properties for free using @dynamicMemberLookup.
  • New Infallible object which is identical to Observable with the guarantee of never failing.
  • Add variadic drive() and emit() to multiple observers and relays.
  • New decode(type:decoder:) operator for ObsrvableTypes of Data.
  • SingleEvent is now simply Result<Element, Swift.Error> and methods changed accordingly (e.g. subscribe(onSuccess:onFailure:)).
  • Add ReplayRelay.
  • Add distinctUntilChanged(at keyPath:).
  • Add UIApplication Reactive extensions .
  • Rename catchError(_:) to catch(_:).
  • Rename catchErrorJustReturn(_:) to catchAndReturn(_:).
  • Rename elementAt(_:) to element(at:).
  • Rename retryWhen(_:) to retry(when:).
  • Rename takeUntil(_:) to take(until:) and takeUntil(behavior:_:) to take(until:behavior:).
  • Rename takeWhile(_:) to take(while:) and takeWhile(behavior:_:) to take(while:behavior:).
  • Rename take(_:) duration overload to take(for:) (e.g. take(for: .seconds(3))).
  • Rename skipWhile(_:) to skip(while:).
  • Rename takeUntil(_:) to take(until:).
  • Rename observeOn and subscribeOn to observe(on:) and subscribe(on:).
  • ignoreElements() now returns Observable<Never>.
  • Make SharedSequence conform to ObservableConvertibleType.
  • Add onDisposed to Maybe, Completable and Single.
  • Unify and optimize swizzling extensions into a single one.
  • Add DisposeBag function builder to allow easy comma-less initialization of a DisposeBag.
  • Advance support of xcframeworks by enabling BUILD_LIBRARY_FOR_DISTRIBUTION and cleaning up.
  • Many, many, many quality of life bugs and fixes.

Catalyst.1 - 2020-03-26 05:17:01

This update is mandatory if you want to use RxSwift in Xcode 11.4 / Swift 5.2 on macOS.

  • Make NSTextView not weak for Swift 5.2 and up. #2125
  • Add WKWebView navigation delegate reactive extensions. #2144


  • The pre-built Carthage binary was built using Xcode 11.4 / Swift 5.2
  • We no longer guarantee support for Xcode 10.x. Maintaining these is counter-intuitive as they're over a year old and are ridden with bugs.

Other improvements and additions can be found in the project's CHANGELOG.md


The pre-built Carthage binary was built using Xcode 11.4.1 / Swift 5.2.2

Catalyst - 2020-03-03 21:19:51

This release removes UIWebView Reactive Extensions due to Apple's hard deprecation, starting April 2020 which also allows RxSwift to be used in Catalyst apps. #2062

Other improvements and additions can be found in the project's CHANGELOG.md


The pre-built Carthage binary was built using Xcode 11.3.1 / Swift 5.1.3

ShaiTheBravest - 2019-04-30 13:31:30

  • Reverts Carthage integration from using static to dynamic libraries. #1960

NOTE: This release is only relevant to Carthage users (#1960), there are no code changes between RxSwift 5.0.0 and 5.0.1.

ShaiTheBrave - 2019-04-29 19:40:13

RxSwift 5 is a mostly source-compatible release targeting the Swift 5 compiler.

Xcode 10.2 is the minimum supported version (or Swift 5 on Linux).

If you're using Xcode 10.1 and below, please use RxSwift 4.5.

  • Relays have been moved to a separate framework - RxRelay, and can be used without RxCocoa. #1924
  • TimeInterval has been deprecated in favor of DispatchTimeInterval. For example - throttle(1.2) would change to throttle(.milliseconds(1200)), while throttle(3) would change to throttle(.seconds(3)). #1472
  • Variable is now entirely deprecated. #1922
  • do now provides additional "after" closures. For example, do(onNext:) and do(afterNext:). #1898
  • bind(to:) now supports multiple observers (e.g. bind(to: observer1, observer2)). #1702
  • Changes the return type of ObservableType.toArray to Single. #1923
  • Adds compactMap. #1925
  • Deprecate Completable.merge in favor of Completable.zip. #1929 #1931
  • RxSwift can be built as a Static Library using Carthage 0.33 and up. #1940


  • SubjectType.SubjectObserverType has been renamed to SubjectType.Observer. #1950
  • The S associated type has been renamed to Subject where applicable. #1950
  • The S generic constraint on SharedSequence has been renamed to SharingStrategy. #1951
  • The E associated type on ObservableConvertibleType and ObserverType have been renamed to Element. #1945
  • The C and S associated types have been renamed to Collection and Sequence accordingly. #1949
  • Renamed ElementType associatedtype to Element. #1945
  • Renamed TraitType associatedtype to Trait. #1945
  • Make RxMutableBox supported on Linux in Swift 5. #1917
  • Fix incorrect assignment to Thread.threadDictionary on Linux. #1912
  • combineLatest of an empty array now completes immediately. #1879
  • Add resultsSelector missing closure labels for some overloads of combineLatest & zip.

[4,5] - 2019-04-01 20:06:31

  • Compatibility with Xcode 10.2.
  • Adds missing UISearchBar.setDelegate().

Atomic.2 - 2019-03-10 22:47:41


  • Adds UIView.rx.backgroundColor Binder. #1888


  • Fix multiple disposes on ScheduledDisposables. #1892
  • Fix DelegateProxy main thread validation. #1882
  • Bring back the first operator to ObservableType. #1886

Atomic.1 - 2019-02-09 16:59:29

  • Adds takeUntil(_ behavior:predicate:).


  • Fixes problems with RxAtomic and thread sanitizer. #1853
  • Fixes problem with passing 0 count to Observable.range. #1870
  • Fixes Swift 5.0 warnings. #1859
  • Fixes problem with RxCocoa and DISABLE_SWIZZLING flag. #1805
  • Internal cleanups:
    • Unused code deletions.
    • Adds SwiftLint.
    • Removes legacy Swift 3.0 conditional compilation flags.

Atomic - 2018-11-02 08:11:57

This relase introduces new framework RxAtomic that enables using C11 atomic primities in RxSwift as a replacement for deprecated OSAtomic* functions. Carthage users will probably need to include this framework manually.

  • Updates deprecated OSAtomic* primitives to use C11 atomic primitives.
  • Adds Event, SingleEvent, MaybeEvent and Recorded conditional conformance to Equatable where their Element is equatable on RXTest for clients that are using Swift >= 4.1.
  • Adds string to NSTextView.
  • Consolidates per platform frameworks to multi-platform frameworks.
  • Xcode 10.1 compatible.


  • Fixes problem with canceling events scheduled on serial scheduler through observeOn operator. #1778
  • Fixes problem with UISearchBar.text property not triggering update when cancel button is tapped. #1714
  • Updates watchos minimum target to 3.0. #1752

RotWeiß.1 - 2018-09-21 07:09:00


  • Fixes issues with CocoaPods and Swift 4.2 version.

RotWeiß - 2018-09-16 18:27:20

  • Compatibility with Xcode 10.0
  • Adds new insert extension to collect and add multiple disposables to DisposeBag.
  • Adds scan(into:accumulator:).
  • Adds queuePriority parameter (defaults to .normal) to OperationQueueScheduler.
  • Performance enhancement reduces Bag dispatch inline code size by 12%.
  • Adds customCaptureSubscriptionCallstack hook to allow custom subscription callstacks to be generated.
  • Remove usage of Variable from Playground, Example projects and Tests.
  • Add XCTAssertRecordedElements to XCTest+Rx.


  • Fix build issues on new arm64_32 architecture (watchOS 5).
  • Removes string interpolation warning.

Zürich - 2018-06-08 20:08:10

  • Adds Smart Key Path subscripting to create a binder for property of object.
  • Adds UICollectionView extensions:
    • prefetchItems
    • cancelPrefetchingForItems
  • Adds UITableView extensions:
    • prefetchRows
    • cancelPrefetchingForRows
  • Fixes various spelling mistakes and missing parameters.
  • Adds UISegmentedControlExtensions:
    • titleForSegment(at:)
    • imageForSegment(at:)
  • Adds Maybe.ifEmpty(default:) operator.
  • Adds Maybe.ifEmpty(switchTo:) operator.
  • Adds Maybe.catchErrorJustReturn(_:) operator.
  • Add Single.flatMapMaybe(_:) operator.
  • Add Single.flatMapCompletable(_:) operator.
  • Add Single.zip(_:) operator.
  • Add Single.catchErrorJustReturn(_:) operator.
  • Add Single.asMaybe(_:) operator.
  • Add Single.asCompletable(_:) operator.


  • Lower macOS Deployment Target to 10.9
  • Deprecates UISegmentedControl.enabled(forSegmentAt:) in favor of UISegmentedControl.enabledForSegment(at:).

Spread.2 - 2018-02-04 15:50:06

  • Adds deprecation warner.


  • Fixes ambiguity issue with Single.do(onNext:onError:onSubscribe:onSubscribed:onDispose:) and Single.do(onSuccess:onError:onSubscribe:onSubscribed:onDispose:).

Spread.1 - 2018-01-09 21:21:57


  • Fixes compilation issue with Xcode 9.1.
  • Deprecates Single.do(onNext:onError:onSubscribe:onSubscribed:onDispose:) in favor of Single.do(onSuccess:onError:onSubscribe:onSubscribed:onDispose:).

Spread - 2017-12-27 23:20:57

  • Adds Recorded<Event<T>> array factory method in RxTest. #1531
  • Replaces global functions next, error, completed with Recorded.next, Recorded.error, Recorded.completed in RxTest. #1510
  • Removes AnyObject constraint from Delegate parameter on DelegateProxy. #1442
  • Adds ObservableType.bind(to:) overloads for PublishRelay and BehaviorRelay.
  • Adds ControlEvent.asSignal().
  • Adds UISegmentedControl.rx.enabled(forSegmentAt:) extension.
  • Adds UIStepper.rx.stepValue extension.
  • Adds error handling Hook to Single, Maybe and Completable. #1532
  • Adds recordCallStackOnError to improve performance of DEBUG configuration.


  • Changes return value of blocking version of single operator from E? to E. #1525
  • Removes deprecation attribute from asSharedSequence.

Mortred - 2017-10-17 22:44:31

  • Adds global Hooks and implements error handling hook.
  • Deprecates asSharedSequence extensions on ObservableType.
  • Publicly exposes controlProperty.


  • Changes Observable extensions to ObservableType extensions.
  • Changes UITableView.didUpdateFocusInContextWithAnimationCoordinator extension argument to UITableViewFocusUpdateContext.
  • Changes access modifier of DelegateProxy.setForwardToDelegate to open.

37 - 2017-10-08 17:28:27

  • Deprecates image(transitionType:) in favor of image.
  • Changes return type of ignoreElements to Completable. #1436
  • Removes warning of sequence completion from Binder. #1431
  • Deprecates Variable in favor of BehaviorRelay.

MoM - 2017-10-01 19:14:45

  • Adds attributedText to UITextField. #1249
  • Adds attributedText to UITextView. #1249
  • Deprecates shareReplayLatestWhileConnected and shareReplay in favor of share(replay:scope:). #1430
  • Changes publish, replay, replayAll to clear state in case of sequence termination to be more consistent with other Rx implementations and enable retries. #1430
  • Replaces share with default implementation of share(replay:scope:). #1430
  • Adds HasDelegate and HasDataSource protocols.
  • Updates package version to v4 format. #1418


  • Adds deprecated warnings to API parts that were missing it. #1427
  • Improves memory handling in isScheduleRequiredKey. #1428
  • Removes pre-release identifier from bundle version to enable TestFlight submissions. #1424
  • Removes code coverage to enable TestFlight submissions. #1423
  • Fixes Xcode warnings. #1421

Shavasana - 2017-09-18 00:20:28

  • Adds materialize() operator for RxBlocking's BlockingObservable. #1383
  • Adds first operator to ObservableType.
  • Deprecates UIBindingObserver in favor of Binder. #1411
  • Adds another specialization of SharedSequence called Signal.
  • Refactors DelegateProxy to be type safe.
  • Changes nested SharedSequence strategy to use inner sharing strategy for result.


  • Call controlTextDidChange(…) as an optional method. #1406
  • Fixed issue with NSControl.rx.value regarding multiple observers. #1399
  • Removes useless extensions from PrimitiveSequence. #1248

Enumerated - 2017-08-20 19:17:49

  • Merges 3.6.1 changes.
  • Adds UIScrollView.willEndDragging extension. #1365
  • Adds enumerated operator (deprecates skipWhileWithIndex, takeWhileWithIndex, flatMapWithIndex, mapWithIndex).


  • Fixes gesture recognizer extensions crash. #1382
  • Adds onSubscribed parameter to SharedSequence extensions.

Polgar - 2017-07-31 07:23:45

  • Swift 4.0 compatibility
  • Changes delegate proxy to use plugin architecture.


  • Fixes public interface leakage of NSKeyValueObservingOptions. #1164

Oxygen.1 - 2017-07-21 11:43:37


  • Fixes compilation issue with Xcode 9b3. #1341
  • Fixes issues with andThen operator. #1347
  • Improves locking behavior of merge and switch operators. #1344

Oxygen - 2017-07-17 17:50:40

  • Adds timeout operator to PrimitiveSequence (Single, Maybe, Observable)
  • Adds delay operator to SharedSequence.
  • Adds andThen operator to Completeable.
  • Adds concat operator to Completeable.
  • Adds RxPickerViewDataSourceType
  • Adds UIPickerView extensions:
    • modelSelected
    • itemTitles
    • itemAttributedTitles
    • items
  • Adds UITableView extensions:
    • modelDeleted
  • Adds UICollectionView extensions:
    • itemHighlighted
    • itemUnhighlighted
    • willDisplayCell
    • didEndDisplayingCell
    • willDisplaySupplementaryView
    • didEndDisplayingSupplementaryView
  • Adds UIScrollView extensions:
    • willBeginDecelerating
    • willBeginDragging
    • willBeginZooming
    • didEndZooming


  • Fixes deadlock anomaly in shareReplayWhileLatest. #1323
  • Removes duplicated events swallowing in NSControl on macOS.

Mango - 2017-05-30 22:36:27

  • Adds from operator on "SharedSequence"
  • Adds merge operator on "Completable"
  • Adds using operator on "PrimitiveSequence"
  • Adds concatMap operator.
  • Adds share(replay:scope:) operator.
  • Adds multicast(makeSubject:) operator.
  • Adds UIButton.image(for:) extension.
  • Adds UIButton.backgroundImage(for:) extension.
  • fixes typos


  • Improves reentrancy and synchronization checks.
  • Issues with share() and shareReplay(_:). #1111
  • .share() inconsistent in behavior. #1242
  • Fixes issues with Driver sometimes sending initial element async. #1253

David.1 - 2017-05-01 22:29:42

  • Adds UINavigationController delegate proxy and extensions:
    • willShow
    • didShow
  • Deprecates TestScheduler.start(_:create:) in favor of TestScheduler.start(disposed:create:).
  • Deprecates TestScheduler.start(_:subscribed:disposed:create:) in favor of TestScheduler.start(created:subscribed:disposed:create:).


  • Fixes observable sequence completion in case of empty arrays for combineLatest and zip. #1205
  • Fixes array version of merge operator completing immediately in case one of the observable sequences is empty. #1221
  • Adds RxTest to SPM. #1215
  • Adds tuple version of operator SharedSequence.zip (collection).
  • Adds tuple version of operator SharedSequence.zip.
  • Adds tuple version of operator SharedSequence.combineLatest (collection).
  • Adds tuple version of operator SharedSequence.combineLatest.
  • Adds missing trimOutput parameter to SharedSequence.debug.
  • Makes RxImagePickerDelegateProxy subclass of RxNavigationControllerDelegateProxy.

David - 2017-04-09 22:12:00

  • Xcode 8.3.1 / Swift 3.1 compatibility.
  • Add subscription closures for Single, Maybe and Completable (onSuccess, onError, onCompleted).
  • Renames Units as Traits and updates the documentation for Single, Completable & Maybe.
  • Deprecates bindTo in favor of bind(to:).
  • Adds materialize operator
  • Adds dematerialize operator
  • Adds latest parameter to SharedSequence.throttle operator.
  • Adds debug operator to PrimitiveSequence.


  • Fixes problem with UICollectionView data source caching and disposal logic. #1154

Hashimoto.1 - 2017-03-14 08:23:27


  • Fixes misspelled Completeable to Completable. #1134

Hashimoto - 2017-03-12 23:15:15

  • Adds Single, Maybe, Completable units inspired by RxJava (operators):
    • create
    • deferred
    • just
    • error
    • never
    • delaySubscription
    • delay
    • do
    • filter
    • map
    • flatMap
    • observeOn
    • subscribeOn
    • catchError
    • retry
    • retryWhen
    • zip
  • Adds asSingle() operator on ObservableType.
  • Adds asMaybe() operator on ObservableType.
  • Adds asCompleteable() operator on ObservableType.
  • Adds variadic combineLatest and zip overloads without result selector (defaults to tuple).
  • Adds array combineLatest and zip overloads with result selector (defaults to array of elements)
  • Adds optimized synchronous merge operator to observable sequence (variadic, array, collection). #579
  • Adds optimized synchronous merge operator to shared sequence (variadic, array, collection).
  • Adds AsyncSubject implementation.
  • Adds XCTAssertEqual overloads to RxTest.
  • Adds countDownDuration to UIDatePicker.
  • Adds attributedTitle(for:) to UIButton.
  • Adds onSubscribed to do operator.
  • Adds isUserInteractionEnabled to UIView.


  • Improves DelegateProxy responds(to:) selector logic to only respond to used selectors. #1081, #1087
  • Deprecates from() in favor of from(optional:) to avoid issues with implicit conversions to optional.
  • Fixes thread sanitizer reporting issues with merge operator. #1063
  • Calls collectionViewLayout.invalidateLayout() after reloadData() as a workaround for iOS 10 bug.
  • Changes UICollectionView.rx.didUpdateFocusInContextWithAnimationCoordinator context parameter type to UICollectionViewFocusUpdateContext

Naldi - 2017-01-31 14:16:46

  • Adds groupBy operator
  • Adds ifEmpty(switchTo:) operator
  • Adds ifEmpty(default:) operator
  • Adds Disposable extension disposed(by:) equivalent to addDisposableTo that is meant to replace it in future 4.0 version.
  • Consolidates atomic operations on Linux and Darwin platform.
  • Adds DEBUG mode concurrent asserts for Variable and Observable.create.
  • Adds DEBUG mode concurrent asserts for Sink.
  • Small performance optimizations for subjects.
  • Adaptations for Xcode 8.3 beta.
  • Adds numberOfPages to UIPageControl.
  • Adds additional resources cleanup unit tests for cases where operators are used without DisposeBags.
  • Chores:
    • Adds final keyword wherever applicable.
    • Remove unnecessary import Foundation statements.
    • Examples cleanup.


  • Improves behavior of shareReplayWhileConnected by making sure that events emitted after disconnect are ignored even in case of fast reconnect.
  • Fixes a couple of operators that were not cleaning up resources on terminal events when used without DisposeBags.
  • Fixes delegate proxy interaction with subclassing of UISearchController.
  • Fixes delegate proxy interaction with subclassing of NSTextStorage.
  • Fixes delegate proxy interaction with subclassing of UIWebView.
  • Fixes delegate proxy interaction with subclassing of UIPickerView.

Galois - 2016-12-28 19:58:49

  • Adds changed property to ControlProperty that returns ControlEvent of user generated changes.
    • textField.text.changed.map { "User changed text to \($0)" }
  • Adds optional overloads for from operator. let num: Int? = 3; let sequence = Observable.from(num)
  • Improves UIBindingObserver by tolerating binding from non main dispatch queue. In case binding is attempted from non main dispatch queue it will be automagically dispathed async to main queue.
  • Makes control property naming consistent for UIDatePicker, UISearchBar, UISegmentedControl, UISwitch, UITextField, UITextView (value property + value alias name).
  • Adds missing extension to UIScrollView.
    • didScroll
    • didZoom
    • didEndDecelerating
    • didEndDragging
    • didScrollToTop
  • Renames refreshing to isRefreshing.
  • adds UIWebView extensions:
    • didStartLoad
    • didFinishLoad
    • didFailLoad
  • Adds UITabBarController extensions
    • willBeginCustomizing
    • willEndCustomizing
    • didEndCustomizing
    • didSelect
  • Adds UIBarButtonItem extensions
    • title
  • Performance optimizations
  • Improves data source behavior by clearing data source proxy when forwarding delegate is nil.


  • Fixes anomaly caused by UITableView invalid state caching of previous data source even after the change. Binding of reactive data source now triggers layoutIfNeeded that invalidates that internal cached state.
  • Fixes issue with race in AnyRecursiveScheduler. #995