Go to file
Sidharth Juyal 00e0f5e689 Rewrite an implementation to reduce compilation time
The coalescing operator for some reasons increases the build times.
On my machine replacing the implementation brings down the compile time `Bag.count` from 1005ms to 13ms
2016-05-31 19:10:21 +02:00
Documentation Fix typo in Documentation/Units.md 2016-05-26 04:17:52 +09:00
Preprocessor Refactors `UIImagePickerController` to use more idiomatic coding style. 2016-01-10 18:33:01 +01:00
Rx.playground Fix Demo 2016-05-19 23:24:35 +08:00
Rx.xcodeproj Merge branch 'develop2' of git://github.com/pRizz/RxSwift into pRizz-develop2 2016-05-28 14:52:31 +02:00
Rx.xcworkspace Updates documentation. 2016-02-14 15:10:14 +01:00
RxBlocking Fixes compilation on Linux. 2016-02-14 12:23:19 -08:00
RxCocoa Merge branch 'feature/uialert-action' of git://github.com/AndrewSB/RxSwift into AndrewSB-feature/uialert-action 2016-05-27 23:24:50 +02:00
RxExample Fix spelling and reactivate access to preferences panel 2016-05-21 17:05:14 +02:00
RxSwift Rewrite an implementation to reduce compilation time 2016-05-31 19:10:21 +02:00
RxTests Fixes Swift 2.2 warnings. 2016-03-22 11:29:39 +01:00
Sources Added unit tests for the hasObservers var. 2016-05-18 19:47:01 -05:00
Tests Remove `hasObservers` from `SubjectType`. 2016-05-28 15:23:22 +02:00
assets Adds proper attribution to Rx Logo and license (at least I think it does) . Sry guys. 2015-05-19 20:44:29 +02:00
scripts Improves CI by killing iOS simulator before each batch of tests to prevent deadlocks caused in Apple code. 2016-05-27 22:36:55 +02:00
.gitignore RxSwift compiles first time on Linux. 2015-12-25 19:29:39 -08:00
.travis.yml Updates travis to xcode7.3 image. 2016-03-22 10:18:01 +01:00
CHANGELOG.md Adds 2.5.0 changes to CHANGELOG. 2016-05-15 18:28:31 +02:00
CODE_OF_CONDUCT.md Fixes contact info. 2016-05-21 16:17:17 +02:00
CONTRIBUTING.md Updates `CONTRIBUTING.md`. 2015-11-14 15:33:48 +01:00
LICENSE.md Standardizes header format. 2015-12-29 16:56:21 +01:00
Package.swift Fixes package configuration for SPM. 2015-12-30 20:13:38 +01:00
README.md Fix typos and tweak language in docs 2016-05-12 13:42:29 +02:00
RxBlocking.podspec Changes 2.5 to 2.5.0. 2016-05-15 18:28:31 +02:00
RxCocoa.podspec Changes 2.5 to 2.5.0. 2016-05-15 18:28:31 +02:00
RxSwift.podspec Changes 2.5 to 2.5.0. 2016-05-15 18:28:31 +02:00
RxTests.podspec Changes 2.5 to 2.5.0. 2016-05-15 18:28:31 +02:00

README.md

Miss Electric Eel 2016 RxSwift: ReactiveX for Swift

Travis CI platforms pod Carthage compatible

Xcode 7.3 Swift 2.2 required

About Rx

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/OSX 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
    .throttle(0.3, scheduler: MainScheduler.instance)
    .distinctUntilChanged()
    .flatMapLatest { query -> Observable<[Repository]> in
        if query.isEmpty {
            return Observable.just([])
        }
    return searchGitHub(query)
        .catchErrorJustReturn([])
}
.observeOn(MainScheduler.instance)</pre></div></td>
... then bind the results to your tableview
searchResults
    .bindTo(tableView.rx_itemsWithCellIdentifier("Cell")) {
        (index, repository: Repository, cell) in
        cell.textLabel?.text = repository.name
        cell.detailTextLabel?.text = repository.url
    }
    .addDisposableTo(disposeBag)

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

⚠️ IMPORTANT! For tvOS support, CocoaPods 0.39 is required. ⚠️

# Podfile
use_frameworks!

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

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

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

$ pod install

Carthage

Xcode 7.1 required

Add this to Cartfile

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

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