Rx 是一种通过 Observable<Element>
接口表达的 计算的通用抽象,它允许你广播和订阅来自 Observable
流的值和其他事件。
RxSwift 是 Reactive Extensions 标准的 Swift 特定实现。
虽然此版本旨在忠于 Rx 的原始精神和命名约定,但此项目也旨在为 Rx API 提供真正的 Swift 优先 API。
跨平台文档可以在 ReactiveX.io 上找到。
与其他 Rx 实现一样,RxSwift 的目的是以 Observable
对象的形式轻松组合异步操作和数据流,并提供一套用于转换和组合这些异步工作的方法。
KVO 观察、异步操作、UI 事件和其他数据流都在 序列抽象 下统一起来。 这就是 Rx 如此简单、优雅和强大的原因。
Single
、Completable
、Maybe
、Driver
和 ControlProperty
是什么 ... 为什么它们存在?RxSwift 与它驱动的异步工作一样具有组合性。 核心单元是 RxSwift 本身,而其他依赖项可以添加用于 UI 工作、测试等等。
它包含五个独立的组件,它们以以下方式相互依赖
┌──────────────┐ ┌──────────────┐
│ RxCocoa ├────▶ RxRelay │
└───────┬──────┘ └──────┬───────┘
│ │
┌───────▼──────────────────▼───────┐
│ RxSwift │
└───────▲──────────────────▲───────┘
│ │
┌───────┴──────┐ ┌──────┴───────┐
│ RxTest │ │ RxBlocking │
└──────────────┘ └──────────────┘
RxSwift
和 RxRelay
。PublishRelay
、BehaviorRelay
和 ReplayRelay
,这是三个 简单的 Subjects 包装器。 它依赖于 RxSwift
。RxSwift
。RxSwift 不包含任何外部依赖项。
以下是当前支持的安装选项
打开 Rx.xcworkspace,选择 RxExample
并点击运行。 此方法将构建所有内容并运行示例应用程序
# Podfile
use_frameworks!
target 'YOUR_TARGET_NAME' do
pod 'RxSwift', '6.9.0'
pod 'RxCocoa', '6.9.0'
end
# RxTest and RxBlocking make the most sense in the context of unit/integration tests
target 'YOUR_TESTING_TARGET' do
pod 'RxBlocking', '6.9.0'
pod 'RxTest', '6.9.0'
end
替换 YOUR_TARGET_NAME
,然后在 Podfile
目录中,输入
$ pod install
从 RxSwift 6 开始的每个版本都包含 *.xcframework
框架二进制文件。
只需将所需的框架二进制文件拖到目标 General 选项卡下的 Frameworks, Libraries, and Embedded Content 部分即可。
提示
你可以通过与 Xcode 15+ 中的以下指纹进行比较来验证二进制文件的身份
BD 80 2E 79 4C 8A BD DA 4C 3F 5D 92 B3 E4 C4 FB FA E4 73 44 10 B9 AD 73 44 2E F1 CE B0 27 61 40
将此添加到 Cartfile
github "ReactiveX/RxSwift" "6.9.0"
$ carthage update
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 中存在一个影响许多项目(包括 RxSwift)的关键交叉依赖错误。 我们已在 2020 年初 提交了一个错误 (SR-12303),但尚未得到答复。 你的结果可能会有所不同。 可以在 这里 找到部分解决方法。
创建一个 Package.swift
文件。
// swift-tools-version:5.0
import PackageDescription
let package = Package(
name: "RxProject",
dependencies: [
.package(url: "https://github.com/ReactiveX/RxSwift.git", .upToNextMajor(from: "6.0.0"))
],
targets: [
.target(name: "RxProject", dependencies: ["RxSwift", .product(name: "RxCocoa", package: "RxSwift")]),
]
)
$ swift build
要构建或测试具有 RxTest 依赖项的模块,请设置 TEST=1
。
$ TEST=1 swift test
$ git submodule add git@github.com:ReactiveX/RxSwift.git
Rx.xcodeproj
拖到项目导航器中Project > Targets > Build Phases > Link Binary With Libraries
,单击 +
并选择 RxSwift
、RxCocoa
和 RxRelay
目标