Swift Objective-C Other
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
.github Original Slack URL brought back to life πŸ§Ÿβ€β™‚οΈπŸ’€ Feb 13, 2018
Documentation Fix readme occurrences of RxTests vs RxTest Feb 10, 2018
Platform Exclude DeprecationWarner from validate-header test Jan 21, 2018
Preprocessor Removes deprecated APIs from Swift preprocessor. Oct 15, 2017
Rx.playground Moves TryYourself playground to the top. Oct 15, 2017
Rx.xcodeproj Update some variable and function names to be consistent with `UIKit`… Feb 15, 2018
Rx.xcworkspace Removes Linux.md from project file. May 10, 2017
RxBlocking Release 4.1.2 Feb 4, 2018
RxCocoa behaviorRelay: improve comments Mar 12, 2018
RxExample Suppress Asset Catalog Compiler Warning of RxExample-iOS Dec 27, 2017
RxSwift Fixes typos #1594. Mar 17, 2018
RxTest Rename RxTest/RxTests.swift to RxTest/RxTest.swift Feb 10, 2018
Sources Updates SPM. Mar 17, 2018
Tests Change indentation from tab to space. Mar 12, 2018
assets Adds proper attribution to Rx Logo and license (at least I think it d… May 19, 2015
scripts Improves change detection script. Mar 17, 2018
.gitignore RxSwift compiles first time on Linux. Dec 26, 2015
.jazzy.yml Update jazzy config Feb 15, 2018
.swift-version Updates SPM to use release version of Swift 4.0. Oct 7, 2017
.travis.yml Updates SPM to use release version of Swift 4.0. Oct 7, 2017
CHANGELOG.md Merge branch 'develop' of github.com:ReactiveX/RxSwift into develop Mar 7, 2018
CODE_OF_CONDUCT.md Fixes contact info. May 21, 2016
CONTRIBUTING.md Contribution guide improvements & link from README Nov 26, 2017
Dangerfile Update Dangerfile to warn for modified RxTest.podspec Feb 10, 2018
Gemfile Danger base setup Jun 3, 2016
Gemfile.lock Update to latest Danger gem to fix Github Markdown issues Apr 5, 2017
LICENSE.md Standardizes header format. Dec 29, 2015
Package.swift Deprecates `Variable` in favor of `BehaviorRelay`. Oct 8, 2017
README.md Original Slack URL brought back to life πŸ§Ÿβ€β™‚οΈπŸ’€ Feb 13, 2018
RxBlocking.podspec Updated podspecs macOS deployment target to 10.9 Feb 10, 2018
RxCocoa.podspec Updated podspecs macOS deployment target to 10.9 Feb 10, 2018
RxSwift.podspec Updated podspecs macOS deployment target to 10.9 Feb 10, 2018
RxTest.podspec Updated podspecs macOS deployment target to 10.9 Feb 10, 2018
default.profraw Release 4.0.0-beta.0 Sep 17, 2017


Miss Electric Eel 2016 RxSwift: ReactiveX for Swift

Travis CI 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
... 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(0.3, 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)



Rx doesn't contain any external dependencies.

These are currently the supported options:


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


Tested with pod --version: 1.3.1

# Podfile

target 'YOUR_TARGET_NAME' do
    pod 'RxSwift',    '~> 4.0'
    pod 'RxCocoa',    '~> 4.0'

# RxTest and RxBlocking make the most sense in the context of unit/integration tests
    pod 'RxBlocking', '~> 4.0'
    pod 'RxTest',     '~> 4.0'

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

$ pod install


Tested with carthage version: 0.26.2

Add this to Cartfile

github "ReactiveX/RxSwift" ~> 4.0
$ carthage update

Swift Package Manager

Tested with swift build --version: Swift 4.0.0-dev (swiftpm-13126)

Create a Package.swift file.

// swift-tools-version:4.0

import PackageDescription

let package = Package(
  name: "RxTestProject",
  dependencies: [
    .package(url: "https://github.com/ReactiveX/RxSwift.git", "4.0.0" ..< "5.0.0")
  targets: [
    .target(name: "RxTestProject", dependencies: ["RxSwift", "RxCocoa"])
$ swift build

To build or test a module with RxTest dependency, set TEST=1. (RxSwift >= 3.4.2)

$ 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-[Platform] and RxCocoa-[Platform] targets