Swift Objective-C Other
Permalink
Failed to load latest commit information.
.github [Fix] Slack legacy URL. Feb 16, 2017
Documentation Fix small mistake. Aug 9, 2017
Platform Update RxSwift for Xcode 9b4 Jul 31, 2017
Preprocessor [Fix] Preprocessor warnings. Mar 4, 2017
Rx.playground Release 3.6.1 Jul 18, 2017
Rx.xcodeproj Adds `enumerated` operator. Aug 11, 2017
Rx.xcworkspace Removes Linux.md from project file. May 10, 2017
RxBlocking Fixes blocking `README.md`. Aug 1, 2017
RxCocoa Adds `onSubscribed` to `do` operator on `SharedSequence`. Aug 16, 2017
RxExample fix pickerView parameter error Jul 24, 2017
RxSwift fix url typo of refCount Aug 16, 2017
RxTest Release 3.6.1 Jul 18, 2017
Sources Updates tests. Aug 11, 2017
Tests Adds `onSubscribed` to `do` operator on `SharedSequence`. Aug 16, 2017
assets Adds proper attribution to Rx Logo and license (at least I think it d… May 19, 2015
scripts Release 3.6.1 Jul 18, 2017
.gitignore RxSwift compiles first time on Linux. Dec 26, 2015
.jazzy.yml Updates tests. Aug 11, 2017
.swift-version Adds `.swift-version`. Oct 20, 2016
.travis.yml Adds xcode9 to CI. Jul 18, 2017
CHANGELOG.md Merge pull request #1374 from AliSoftware/patch-3 Aug 10, 2017
CODE_OF_CONDUCT.md Fixes contact info. May 21, 2016
CONTRIBUTING.md Improves CONTRIBUTING.md Jun 26, 2016
Dangerfile Merge branch 'develop' into fix/danger-changelog Apr 5, 2017
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 Adds RxTest only if `TEST=1` environmental variable is set. May 1, 2017
README.md Move word inside paranthesis Jun 15, 2017
RxBlocking.podspec Release 3.6.1 Jul 18, 2017
RxCocoa.podspec Release 3.6.1 Jul 18, 2017
RxSwift.podspec Release 3.6.1 Jul 18, 2017
RxTest.podspec Release 3.6.1 Jul 18, 2017

README.md

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.

Usage

Here's an example In Action
Define search for GitHub repositories ...
let searchResults = searchBar.rx.text.orEmpty
    .throttle(0.3, scheduler: MainScheduler.instance)
    .distinctUntilChanged()
    .flatMapLatest { query -> Observable<[Repository]> in
        if query.isEmpty {
            return .just([])
        }
        return searchGitHub(query)
            .catchErrorJustReturn([])
    }
    .observeOn(MainScheduler.instance)
... then bind the results to your tableview
searchResults
    .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)

Requirements

Installation

Rx doesn't contain any external dependencies.

These are currently the supported options:

Manual

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

CocoaPods

Tested with pod --version: 1.1.1

# Podfile
use_frameworks!

target 'YOUR_TARGET_NAME' do
    pod 'RxSwift',    '~> 3.0'
    pod 'RxCocoa',    '~> 3.0'
end

# RxTests and RxBlocking make the most sense in the context of unit/integration tests
target 'YOUR_TESTING_TARGET' do
    pod 'RxBlocking', '~> 3.0'
    pod 'RxTest',     '~> 3.0'
end

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

$ pod install

Carthage

Tested with carthage version: 0.18.1

Add this to Cartfile

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

Swift Package Manager

Tested with swift build --version: 3.0.0 (swiftpm-19)

Create a Package.swift file.

import PackageDescription

let package = Package(
    name: "RxTestProject",
    targets: [],
    dependencies: [
        .Package(url: "https://github.com/ReactiveX/RxSwift.git", majorVersion: 3)
    ]
)
$ 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

References