GitHub - ReactiveX/RxSwift: Reactive Programming in Swift
source link: https://github.com/ReactiveX/RxSwift
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
README.md
RxSwift: ReactiveX for Swift
- RxSwift 3.x / Swift 3.x can be found in rxswift-3.0 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/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- why use rx?
- the basics, getting started with RxSwift
- traits - what are
Single
,Completable
,Maybe
,Driver
,ControlProperty
, andVariable
... and why do they exist? - testing
- tips and common errors
- debugging
- the math behind Rx
- what are hot and cold observable sequences?
- Integrate RxSwift/RxCocoa with my app. Installation Guide
- with the example app. Running Example App
- with operators in playgrounds. Playgrounds
- All of this is great, but it would be nice to talk with other people using RxSwift and exchange experiences.
Join Slack Channel - Report a problem using the library. Open an Issue With Bug Template
- Request a new feature. Open an Issue With Feature Request Template
- Help out Check out contribution guide
- libraries from RxSwiftCommunity.
- Pods using RxSwift.
- 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)
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
- Xcode 9.0
- Swift 4.0
- Swift 3.x (use
rxswift-3.0
branch instead) - Swift 2.3 (use
rxswift-2.0
branch instead)
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
# 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
Carthage
Tested with carthage version
: 0.26.2
Add this to Cartfile
github "ReactiveX/RxSwift" ~> 4.0
$ carthage update
Swift Package Manager
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 selectRxSwift-[Platform]
andRxCocoa-[Platform]
targets
References
- http://reactivex.io/
- Reactive Extensions GitHub (GitHub)
- RxSwift RayWenderlich.com Book
- Boxue.io RxSwift Online Course (Chinese ??)
- Erik Meijer (Wikipedia)
- Expert to Expert: Brian Beckman and Erik Meijer - Inside the .NET Reactive Framework (Rx) (video)
- Reactive Programming Overview (Jafar Husain from Netflix)
- Subject/Observer is Dual to Iterator (paper)
- Rx standard sequence operators visualized (visualization tool)
- Haskell
Recommend
-
164
RxJava: Reactive Extensions for the JVM RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequen...
-
105
RxAndroid: Reactive Extensions for Android Android specific bindings for RxJava 3. This module adds the minimum classes to RxJava that make writing reactive component...
-
62
Learn how to use the power of ReactiveX with JavaScript in this comprehensive RxJS tutorial series.
-
68
接上一篇 用Go语言实现ReactiveX(二)——Deliver 我们在上一篇,谈到了数据传递者Deliver。那么还差一个Subscriber没讲,这个实现其实已经没什么好讲的了,可以直接...
-
41
Happy Friday! It’s a great day for a book release to give you some great weekend reading! We’re happy to announce that we’re now on the Second Edition of
-
10
使用 ReactiveX 构建 MVVM李明亮等100万人斯拉夫传承者,嘴炮学家 最近在思考一些问题。
-
3
Reactive Extensions for the Go Language ReactiveX ReactiveX, or Rx for short, is an API for programming with Observable streams. This is the official ReactiveX API for the Go language.
-
20
RxSwift to Combine Cheatsheet This is a Cheatsheet for RxSwift developers interested in Apple's new Combine framework....
-
3
本文主要介绍个人在 Swift 项目开发中的一些实践经验,供大家所借鉴或者探讨。 提高开发效率,降低 Bug 发生率,是我们每个开发所追随的目标。个人认为通过 CocoaPods 实现模块化组件化,积累适合的组件模块,重复利用公用模块,不仅可以提高开发效率并...
-
7
列文章目录 因为目录比较多,每次更新这里比较麻烦,所以推荐点击到...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK