ReactiveX/RxSwift

Name: RxSwift

Owner: ReactiveX

Description: Reactive Programming in Swift

Created: 2015-04-07 21:25:17.0

Updated: 2018-01-18 00:01:44.0

Pushed: 2018-01-17 13:29:22.0

Homepage:

Size: 11950

Language: Swift

GitHub Committers

UserMost Recent Commit# Commits

Other Committers

UserEmailMost Recent Commit# Commits

README

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
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.3.1

dfile
frameworks!

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


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

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

d install
Carthage

Tested with carthage version: 0.26.2

Add this to Cartfile

ub "ReactiveX/RxSwift" ~> 4.0
ash
rthage update
Swift Package Manager

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

Create a Package.swift file.

wift-tools-version:4.0

rt PackageDescription

package = Package(
me: "RxTestProject",
pendencies: [
.package(url: "https://github.com/ReactiveX/RxSwift.git", "4.0.0" ..< "5.0.0")

rgets: [
.target(name: "RxTestProject", dependencies: ["RxSwift", "RxCocoa"])


ash
ift build

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

ST=1 swift test
Manually using git submodules
t submodule add git@github.com:ReactiveX/RxSwift.git
References

This work is supported by the National Institutes of Health's National Center for Advancing Translational Sciences, Grant Number U24TR002306. This work is solely the responsibility of the creators and does not necessarily represent the official views of the National Institutes of Health.