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
Size: 11950
Language: Swift
GitHub Committers
User | Most Recent Commit | # Commits |
---|
Other Committers
User | Most Recent Commit | # Commits |
---|
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.
Single
, Completable
, Maybe
, Driver
, ControlProperty
, and Variable
… and why do they exist?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) |
rxswift-3.0
branch instead)rxswift-2.0
branch instead)Rx doesn't contain any external dependencies.
These are currently the supported options:
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
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
Tested with carthage version
: 0.26.2
Add this to Cartfile
ub "ReactiveX/RxSwift" ~> 4.0
ash
rthage update
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
t submodule add git@github.com:ReactiveX/RxSwift.git
Rx.xcodeproj
into Project NavigatorProject > Targets > Build Phases > Link Binary With Libraries
, click +
and select RxSwift-[Platform]
and RxCocoa-[Platform]
targets