Rx 是通过 Observable
接口表达的计算泛型抽象,允许您从 Observable
流中广播和订阅值和其他事件。
RxSwift 是 Reactive Extensions 标准的 Swift 特定实现。
虽然这个版本旨在忠实于 Rx 的原始精神和命名约定,但该项目还旨在为 Rx API 提供真正的 Swift 首选 API。
跨平台文档可以在 ReactiveX.io 上找到。
类似于其他 Rx 实现,RxSwift 的意图是使异步操作的轻松组合和在 Observable
对象形式的数据流成为可能,并附带一系列转换和组合这些异步工作片段的方法。
KVO 观察、异步操作、UI 事件和其他数据流都统一在 序列抽象 下。这就是为什么 Rx 如此简单、优雅和强大的原因。
我来到这里是因为我想...
...理解
- 为什么使用 Rx?
- 基础,RxSwift 入门
- 特性和类型 - 什么是
Single
、Completable
、Maybe
、Driver
和ControlProperty
... 以及为什么它们存在? - 测试
- 提示和常见错误
- 调试
- Rx 的数学原理
- 什么是热观察序列和冷观察序列?
… 安装
- 将 RxSwift/RxCocoa 集成到我的应用程序中。 安装指南
… 故障排除
… 交互
- 这些都很好,但能与使用 RxSwift 的人交流并与他们交流经验将会更好。
加入 Slack 频道 - 使用库报告问题。 使用bug模板打开问题
- 请求新的功能。 使用功能请求模板打开问题
- 帮助他人 查看贡献指南
… 比较
… 理解结构
RxSwift 的可组合性与其所驱动的异步工作一样强。其核心单元是 RxSwift 本身,而其他依赖项可以为 UI 工作、测试等添加。
它由五个相互依赖的独立组件组成,如下所述
┌──────────────┐ ┌──────────────┐
│ RxCocoa ├────▶ RxRelay │
└───────┬──────┘ └──────┬───────┘
│ │
┌───────▼──────────────────▼───────┐
│ RxSwift │
└───────▲──────────────────▲───────┘
│ │
┌───────┴──────┐ ┌──────┴───────┐
│ RxTest │ │ RxBlocking │
└──────────────┘ └──────────────┘
- RxSwift:RxSwift 的核心,提供 Rx 标准作为由 ReactiveX 定义的(主要是)。它没有其他依赖项。
- RxCocoa:为通用 iOS/macOS/watchOS & tvOS 应用程序开发提供特定于 Cocoa 的功能,例如共享序列、属性等。它依赖于
RxSwift
和RxRelay
。 - RxRelay: 提供了
PublishRelay
、BehaviorRelay
和ReplayRelay
,这三个是围绕 Subjects 的简单封装。它依赖于RxSwift
。 - RxTest 和 RxBlocking:提供基于 Rx 的系统的测试功能。它依赖于
RxSwift
。
使用方法
需求
- Xcode 12.x
- Swift 5.x
对于 Xcode 11 及以下版本,请使用 RxSwift 5.x。
安装
RxSwift 不包含任何外部依赖
目前支持以下安装选项
手动
打开 Rx.xcworkspace,选择 RxExample
并运行。此方法将构建一切并运行示例应用程序
CocoaPods
# Podfile
use_frameworks!
target 'YOUR_TARGET_NAME' do
pod 'RxSwift', '6.5.0'
pod 'RxCocoa', '6.5.0'
end
# RxTest and RxBlocking make the most sense in the context of unit/integration tests
target 'YOUR_TESTING_TARGET' do
pod 'RxBlocking', '6.5.0'
pod 'RxTest', '6.5.0'
end
替换 YOUR_TARGET_NAME
,然后在 Podfile
目录中输入
$ pod install
XCFrameworks
从RxSwift 6版本开始,每个版本都包含*.xcframework
框架的二进制文件。
只需将所需的框架二进制文件拖到目标General
选项卡下的Frameworks, Libraries, and Embedded Content部分。
注意:如果您正在使用
RxCocoa
,在导入RxCocoa
之前,务必也拖拽RxCocoaRuntime.xcframework
。
Carthage
将其添加到Cartfile
github "ReactiveX/RxSwift" "6.5.0"
$ carthage update
将Carthage作为静态库使用
Carthage默认将RxSwift构建为动态库。
如果您想使用Carthage将RxSwift构建为静态库,可以使用以下脚本手动修改框架类型,然后再使用Carthage进行构建
carthage update RxSwift --platform iOS --no-build
sed -i -e 's/MACH_O_TYPE = mh_dylib/MACH_O_TYPE = staticlib/g' Carthage/Checkouts/RxSwift/Rx.xcodeproj/project.pbxproj
carthage build RxSwift --platform iOS
Swift Package Manager
注意:Swift Package Manager中存在一个关键的交叉依赖项错误,影响了包括RxSwift在内的许多项目。我们在2020年初提交了错误(SR-12303),但尚未得到回复。效果可能因项目而异。部分解决方案可以在这里找到。
创建一个Package.swift
文件。
// swift-tools-version:5.0
import PackageDescription
let package = Package(
name: "RxTestProject",
dependencies: [
.package(url: "https://github.com/ReactiveX/RxSwift.git", .exact("6.5.0"))
],
targets: [
.target(name: "RxTestProject", dependencies: ["RxSwift", "RxCocoa"])
]
)
$ swift build
要使用RxTest依赖关系构建或测试模块,设置TEST=1
。
$ TEST=1 swift test
手动使用git子模块
- 将RxSwift作为子模块添加
$ git submodule add [email protected]:ReactiveX/RxSwift.git
- 将
Rx.xcodeproj
拖拽到项目导航器 - 转到项目菜单:点击
Project > Targets > Build Phases > Link Binary With Libraries
,点击+
号并选择RxSwift
、RxCocoa
和RxRelay
目标