Miss Electric Eel 2016 RxSwift: ReactiveX for Swift

Travis CI platforms pod Carthage compatible Swift Package Manager compatible

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

RxSwiftRxSwift 版本。

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

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

KVO,异步操作 和 流 全部被统一成抽象序列。这就是为什么 Rx 会如此简单,优雅和强大。

操作

加入 RxSwift QQ 交流群: 871293356

下载文档电子书

文档更新日志

19年5月21日(RxSwift 5)

示例

Github 搜索…

RxSwift: ReactiveX for Swift - 图8

定义搜索结果 …

  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)

必备条件

  • Xcode 10.2
  • Swift 5.0

对于 Xcode 10.1 以下版本,请使用 RxSwift 4.5

安装

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

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

手动

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

CocoaPods

pod --version: 1.3.1 已通过测试

  1. # Podfile
  2. use_frameworks!
  3. target 'YOUR_TARGET_NAME' do
  4. pod 'RxSwift', '~> 5.0'
  5. pod 'RxCocoa', '~> 5.0'
  6. end
  7. # RxTests 和 RxBlocking 将在单元/集成测试中起到重要作用
  8. target 'YOUR_TESTING_TARGET' do
  9. pod 'RxBlocking', '~> 5.0'
  10. pod 'RxTest', '~> 5.0'
  11. end

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

  1. $ pod install

Carthage

官方支持 0.33 及以上版本。

添加到 Cartfile

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

Carthage 作为静态库。

如果您希望使用 Carthage 将 RxSwift 构建为静态库,在使用 Carthage 构建之前,您可以使用以下脚本手动修改框架类型:

  1. carthage update RxSwift --platform iOS --no-build
  2. sed -i -e 's/MACH_O_TYPE = mh_dylib/MACH_O_TYPE = staticlib/g' Carthage/Checkouts/RxSwift/Rx.xcodeproj/project.pbxproj
  3. carthage build RxAlamofire --platform iOS

Swift Package Manager

创建Package.swift 文件。

  1. // swift-tools-version:5.0
  2. import PackageDescription
  3. let package = Package(
  4. name: "RxTestProject",
  5. dependencies: [
  6. .package(url: "https://github.com/ReactiveX/RxSwift.git", from: "5.0.0")
  7. ],
  8. targets: [
  9. .target(name: "RxTestProject", dependencies: ["RxSwift", "RxCocoa"])
  10. ]
  11. )
  1. $ swift build

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

  1. $ TEST=1 swift test

使用 git 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]