2016-01-27 00:05:54 +03:00
< img src = "assets/Rx_Logo_M.png" alt = "Miss Electric Eel 2016" width = "36" height = "36" > RxSwift: ReactiveX for Swift
2015-04-08 01:28:38 +03:00
======================================
2016-01-26 00:33:33 +03:00
[![Travis CI ](https://travis-ci.org/ReactiveX/RxSwift.svg?branch=master )](https://travis-ci.org/ReactiveX/RxSwift) ![platforms ](https://img.shields.io/badge/platforms-iOS%20%7C%20OSX%20%7C%20tvOS%20%7C%20watchOS%20%7C%20Linux%28experimental%29-333333.svg ) ![pod ](https://img.shields.io/cocoapods/v/RxSwift.svg )
2015-08-02 15:00:45 +03:00
2015-12-30 05:16:20 +03:00
Xcode 7 Swift 2.1 required
2015-09-01 13:21:06 +03:00
## About Rx
2015-04-08 01:28:38 +03:00
2015-07-28 00:28:04 +03:00
Rx is a [generic abstraction of computation ](https://youtu.be/looJcaeboBY ) expressed through `Observable<Element>` interface.
This is a Swift version of [Rx ](https://github.com/Reactive-Extensions/Rx.NET ).
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 ](http://reactivex.io/ ).
2015-05-19 21:32:00 +03:00
Like the original Rx, its intention is to enable easy composition of asynchronous operations and event/data streams.
2015-07-28 00:28:04 +03:00
KVO observing, async operations and streams are all unified under [abstraction of sequence ](Documentation/GettingStarted.md#observables-aka-sequences ). This is the reason why Rx is so simple, elegant and powerful.
2015-05-19 21:32:00 +03:00
2016-02-14 17:10:14 +03:00
## I came here because I want to ...
2015-04-10 11:33:25 +03:00
2016-02-14 17:31:03 +03:00
###### ... understand
2016-02-14 17:29:12 +03:00
2016-02-25 01:16:12 +03:00
* [why use rx? ](Documentation/Why.md )
2016-03-12 22:12:59 +03:00
* [the basics, getting started with RxSwift ](Documentation/GettingStarted.md )
* [units ](Documentation/Units.md ) - what is `Driver` , `ControlProperty` , and `Variable` ... and why do they exist?
* [testing ](Documentation/UnitTests.md )
* [tips and common errors ](Documentation/Tips.md )
* [debugging ](Documentation/GettingStarted.md#debugging )
2016-02-15 01:26:18 +03:00
* [the math behind Rx ](Documentation/MathBehindRx.md )
2016-02-25 01:16:12 +03:00
* [what are hot and cold observable sequences? ](Documentation/HotAndColdObservables.md )
* [what does the the public API look like? ](Documentation/API.md )
2016-02-14 17:29:12 +03:00
###### ... install
2015-05-10 01:16:44 +03:00
2016-02-14 17:10:14 +03:00
* Integrate RxSwift/RxCocoa with my app. [Installation Guide ](Documentation/Installation.md )
2015-05-10 01:16:44 +03:00
2016-02-14 17:29:12 +03:00
###### ... hack around
2015-05-10 01:16:44 +03:00
2016-02-14 17:29:12 +03:00
* with example app. [Running Example App ](Documentation/ExampleApp.md )
* with operators in playgrounds. [Playgrounds ](Documentation/Playgrounds.md )
2015-05-10 01:16:44 +03:00
2016-02-14 17:29:12 +03:00
###### ... interact
2015-04-08 01:28:38 +03:00
2016-02-15 01:26:18 +03:00
* All of this is great, but it would be nice to talk with other people using RxSwift and exchange experiences. < br /> [![Slack channel](http://slack.rxswift.org/badge.svg)](http://slack.rxswift.org) [Join Slack Channel ](http://slack.rxswift.org/ )
2016-02-14 17:10:14 +03:00
* Report a problem using the library. [Open an Issue With Bug Template ](Documentation/IssueTemplate.md )
* Request a new feature. [Open an Issue With Feature Request Template ](Documentation/NewFeatureRequestTemplate.md )
2015-04-08 01:28:38 +03:00
2016-02-14 17:31:03 +03:00
###### ... compare
2015-07-28 00:28:04 +03:00
2016-02-15 01:26:18 +03:00
* [with other libraries ](Documentation/ComparisonWithOtherLibraries.md ).
2015-05-03 19:02:59 +03:00
2015-09-09 12:44:25 +03:00
2016-02-15 01:26:18 +03:00
###### ... find compatible
2015-09-09 12:44:25 +03:00
2016-02-15 01:26:18 +03:00
* libraries from [RxSwiftCommunity ](https://github.com/RxSwiftCommunity ).
* [Pods using RxSwift ](https://cocoapods.org/?q=uses%3Arxswift ).
2015-09-09 12:44:25 +03:00
2016-02-14 17:31:03 +03:00
###### ... see the broader vision
2015-09-09 12:44:25 +03:00
2016-02-25 01:16:12 +03:00
* Does this exist for Android? [RxJava ](https://github.com/ReactiveX/RxJava )
2016-02-14 17:10:14 +03:00
* Where is all of this going, what is the future, what about reactive architectures, how do you design entire apps this way? [Cycle.js ](https://github.com/cyclejs/cycle-core ) - this is javascript, but [RxJS ](https://github.com/Reactive-Extensions/RxJS ) is javascript version of Rx.
2015-09-09 12:44:25 +03:00
2016-02-14 17:29:12 +03:00
##### References
2015-05-03 19:02:59 +03:00
2015-07-28 00:28:04 +03:00
* [http://reactivex.io/ ](http://reactivex.io/ )
2015-05-03 19:02:59 +03:00
* [Reactive Extensions GitHub (GitHub) ](https://github.com/Reactive-Extensions )
* [Erik Meijer (Wikipedia) ](http://en.wikipedia.org/wiki/Erik_Meijer_%28computer_scientist%29 )
2015-07-28 00:28:04 +03:00
* [Expert to Expert: Brian Beckman and Erik Meijer - Inside the .NET Reactive Framework (Rx) (video) ](https://youtu.be/looJcaeboBY )
2016-02-20 13:34:35 +03:00
* [Reactive Programming Overview (Jafar Husain from Netflix) ](https://www.youtube.com/watch?v=dwP1TNXE6fc )
2015-05-03 19:02:59 +03:00
* [Subject/Observer is Dual to Iterator (paper) ](http://csl.stanford.edu/~christos/pldi2010.fit/meijer.duality.pdf )
* [Rx standard sequence operators visualized (visualization tool) ](http://rxmarbles.com/ )
* [Haskell ](https://www.haskell.org/ )