RxSwift 中文文档 - 图1

RxSwift: ReactiveX for Swift

Travis CI platforms pod Carthage compatible Swift Package Manager compatible QQ Group epub

ReactiveX(简写: Rx) 是一个可以帮助我们简化异步编程的框架。

它拓展了观察者模式。使你能够自由组合多个异步事件,而不需要去关心线程,同步,线程安全,并发数据以及I/O阻塞。

RxSwift 是 Rx 的 Swift 版本。

它尝试将原有的一些概念移植到 iOS/macOS 平台。

你可以在这里找到跨平台文档 ReactiveX.io。


RxSwift QQ 交流群: 424180219


文档更新日志

18年2月15日

  • 纠正错别字
  • 给 retry 操作符加入演示代码
  • 给 replay 操作符加入演示代码
  • 给 connect 操作符加入演示代码
  • 给 publish 操作符加入演示代码
  • 给 reduce 操作符加入演示代码
  • 给 skipUntil 操作符加入演示代码
  • 给 skipWhile 操作符加入演示代码
  • 给 skip 操作符加入演示代码

… 点击查看更多


示例

Github 搜索…

RxSwift 中文文档 - 图9

定义搜索结果 …

1. let searchResults = searchBar.rx.text.orEmpty
2. .throttle(0.3, scheduler: MainScheduler.instance)
3. .distinctUntilChanged()
4. .flatMapLatest { query -> Observable<[Repository]> in
5. if query.isEmpty {
6. return .just([])
7. }
8. return searchGitHub(query)
9. .catchErrorJustReturn([])
10. }
11. .observeOn(MainScheduler.instance)

… 然后将结果绑定到 tableview 上

1. searchResults
2. .bind(to: tableView.rx.items(cellIdentifier: "Cell")) {
3. (index, repository: Repository, cell) in
4. cell.textLabel?.text = repository.name
5. cell.detailTextLabel?.text = repository.url
6. }
7. .disposed(by: disposeBag)

必备条件

安装

安装 RxSwift 不需要任何第三方依赖。

以下是当前支持的安装方法:

手动

打开 Rx.xcworkspace, 选中 RxExample 并且点击运行。 此方法将构建所有内容并运行示例应用程序。

CocoaPods

pod --version: 1.3.1 已通过测试

1. # Podfile
2. use_frameworks!

4. target 'YOUR_TARGET_NAME' do
5. pod 'RxSwift',    '~> 4.0'
6. pod 'RxCocoa',    '~> 4.0'
7. end

9. # RxTests 和 RxBlocking 将在单元/集成测试中起到重要作用
10. target 'YOUR_TESTING_TARGET' do
11. pod 'RxBlocking', '~> 4.0'
12. pod 'RxTest',     '~> 4.0'
13. end

替换 YOUR_TARGET_NAME 然后在 Podfile 目录下, 终端输入:

1. $ pod install

Carthage

carthage version: 0.26.2 已通过测试

添加到 Cartfile

1. github "ReactiveX/RxSwift" ~> 4.0
1. $ carthage update

Swift Package Manager

swift build --version: Swift 4.0.0-dev (swiftpm-13126) 已通过测试

创建Package.swift 文件。

1. // swift-tools-version:4.0

3. import PackageDescription

5. let package = Package(
6. name: "RxTestProject",
7. dependencies: [
8. .package(url: "https://github.com/ReactiveX/RxSwift.git", "4.0.0" ..< "5.0.0")
9. ],
10. targets: [
11. .target(name: "RxTestProject", dependencies: ["RxSwift", "RxCocoa"])
12. ]
13. )
1. $ swift build

如果构建或测试一个模块对 RxTest 存在依赖, 设置 TEST=1. (RxSwift >= 3.4.2)

1. $ TEST=1 swift test

使用 submodules 手动集成

  • 添加 RxSwift 作为子模块
1. $ git submodule add git@github.com:ReactiveX/RxSwift.git
  • 拖拽 Rx.xcodeproj 到项目中
  • 前往 Project > Targets > Build Phases > Link Binary With Libraries, 点击 + 并且选中 RxSwift-[Platform] 和 RxCocoa-[Platform]