Skip to content

tamwei/RxSwift

This branch is 648 commits behind ReactiveX/RxSwift:main.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

0df62b4 · Sep 20, 2018
Feb 13, 2018
Sep 5, 2018
Apr 13, 2018
Jun 8, 2018
Aug 21, 2018
Sep 20, 2018
Sep 20, 2018
Sep 20, 2018
Sep 20, 2018
Sep 18, 2018
Sep 20, 2018
Sep 20, 2018
Aug 21, 2018
Sep 20, 2018
May 19, 2015
Sep 15, 2018
Dec 26, 2015
Feb 15, 2018
Oct 7, 2017
Sep 19, 2018
Sep 20, 2018
May 21, 2016
Nov 26, 2017
Feb 10, 2018
Jun 3, 2016
Apr 5, 2017
Dec 29, 2015
Oct 8, 2017
Feb 13, 2018
Sep 20, 2018
Sep 20, 2018
Sep 20, 2018
Sep 20, 2018
Sep 17, 2017

Repository files navigation

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

Tested with pod --version: 1.3.1

# Podfile
use_frameworks!

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

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

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

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 [email protected]: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

About

Reactive Programming in Swift

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Swift 93.6%
  • Objective-C 5.6%
  • Other 0.8%