Go to file
Ryu Tanabe f0863eaca1 Merge commit 'f23eb75adc8aad2f4c5ae620da9cf3acd16cca12' into rx_uisearchbar
* commit 'f23eb75adc8aad2f4c5ae620da9cf3acd16cca12':
  Make Bool as KVORepresentable, to avoid ambiguty in observe()
  Fixes unit tests.
  Fixes delay operator.
  Adds timeout parameter to blocking observable sequence.
  patch the implement of convert to serial queue.
  implement all tests.
  Add real scheduler test.
  Use `SchedulerType.scheduleRecursive` and `CompositeDisposable.removeDisposable`.
  move lock on Error case. I'm sorry I fix mistype in _group.addDisposable argmunets. I think it was missed when rename tempolary field.
  update API.md
  add delay operator
2016-08-30 22:51:04 +09:00
Documentation Merge branch 'feature/delay-operator' of github.com:tarunon/RxSwift into delay_operator 2016-08-28 20:00:25 +02:00
Preprocessor Fixes for Swift 3.0 2016-07-23 16:05:04 +02:00
Rx.playground Updates documentation for 3.0.0.alpha.1 2016-08-21 18:40:08 +02:00
Rx.xcodeproj Merge branch 'feature/delay-operator' of github.com:tarunon/RxSwift into delay_operator 2016-08-28 20:00:25 +02:00
Rx.xcworkspace Changes order of pre-release tests. 2016-08-20 23:06:30 +02:00
RxBlocking Adds timeout parameter to blocking observable sequence. 2016-08-28 23:34:40 +02:00
RxCocoa Merge commit 'f23eb75adc8aad2f4c5ae620da9cf3acd16cca12' into rx_uisearchbar 2016-08-30 22:51:04 +09:00
RxExample Improves deprecation messages for table and collection views. #841 2016-08-21 15:09:14 +02:00
RxSwift Fixes delay operator. 2016-08-28 23:35:00 +02:00
RxTests Updates documentation for 3.0.0.alpha.1 2016-08-21 18:40:08 +02:00
Sources Adds test to Linux tests. 2016-05-31 21:54:57 +02:00
Tests Merge commit 'f23eb75adc8aad2f4c5ae620da9cf3acd16cca12' into rx_uisearchbar 2016-08-30 22:51:04 +09: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 version detection. 2016-08-21 03:49:56 +02:00
.gitignore RxSwift compiles first time on Linux. 2015-12-25 19:29:39 -08:00
.jazzy.yml Add a .jazzy.yml file and scripts that create and update it 2016-06-08 15:19:50 +02:00
.travis.yml Adds printing of environment info. 2016-07-10 13:06:00 +02:00
CHANGELOG.md adds `UISearchBar` extensions 2016-08-23 09:08:56 +09:00
CODE_OF_CONDUCT.md Fixes contact info. 2016-05-21 16:17:17 +02:00
CONTRIBUTING.md Improves CONTRIBUTING.md 2016-06-26 14:59:45 +02:00
Dangerfile Adds `swift-3.0` as valid branch in Dangerfile. 2016-07-11 01:36:22 +02:00
Gemfile Danger base setup 2016-06-03 10:27:01 +03:00
Gemfile.lock Danger base setup 2016-06-03 10:27:01 +03:00
ISSUE_TEMPLATE.md Fixes for issue template. 2016-08-27 12:45:03 +02:00
LICENSE.md Standardizes header format. 2015-12-29 16:56:21 +01:00
Package.swift Update for Xcode 8 beta 5 2016-08-10 09:45:23 +10:00
README.md Updates README.md with Swift 2.3 version. 2016-08-27 12:33:10 +02:00
RxBlocking.podspec Release 3.0.0.alpha.1 2016-08-21 03:44:23 +02:00
RxCocoa.podspec Release 3.0.0.alpha.1 2016-08-21 03:44:23 +02:00
RxSwift.podspec Release 3.0.0.alpha.1 2016-08-21 03:44:23 +02:00
RxTests.podspec Release 3.0.0.alpha.1 2016-08-21 03:44:23 +02:00

README.md

Miss Electric Eel 2016 RxSwift: ReactiveX for Swift

Travis CI platforms pod Carthage compatible

About Rx

⚠️ This readme describes RxSwift 3.0 version that requires Swift 3.0⚠️

⚠️ If you are looking for Swift 2.3 compatible version, please take a look at RxSwift ~> 2.0 versions and swift-2.3 branch ⚠️

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.items(cellIdentifier: "Cell")) {
        (index, repository: Repository, cell) in
        cell.textLabel?.text = repository.name
        cell.detailTextLabel?.text = repository.url
    }
    .addDisposableTo(disposeBag)

Requirements

  • Xcode 8.0 beta 6 (8S201h)

  • Swift 3.0

  • iOS 8.0+

  • Mac OS X 10.10+

  • tvOS 9.0+

  • watchOS 2.0+

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

# Podfile
use_frameworks!

target 'YOUR_TARGET_NAME' do
    pod 'RxSwift',    '~> 3.0.0.alpha.1'
    pod 'RxCocoa',    '~> 3.0.0.alpha.1'
end

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

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

⚠️ If you want to use CocoaPods with Xcode 8.0 beta and Swift 3.0, you might need to add the following lines to your podfile: ⚠️

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '3.0'
      config.build_settings['MACOSX_DEPLOYMENT_TARGET'] = '10.10'
    end
  end
end
$ pod install

Carthage

Add this to Cartfile

github "ReactiveX/RxSwift" "3.0.0.alpha.1"
$ 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