Rx 是通过 Observable
接口表达的计算泛型抽象,允许您从 Observable
流中广播和订阅值和其他事件。
RxSwift 是 Reactive Extensions 标准的 Swift 特定实现。
尽管这个版本旨在保持与原始精神和命名约定的一致,但这个项目也旨在为 Rx API 提供真正的 Swift 首选 API。
跨平台文档可以在 ReactiveX.io 上找到。
与其他 Rx 实现一样,RxSwift 的目的是使异步操作和数据流以 Observable
对象的形式以及一系列转换和组合这些异步工作片段的方法的简单组合变得容易。
KVO 观察、异步操作、UI 事件和其他数据流都在 序列抽象 下统一。这就是为什么 Rx 是如此简单、优雅和强大的原因。
我来这里是因为我想...
...理解
- 为什么要用 Rx?
- 基础知识,开始使用 RxSwift
- 特质 -
Single
、Completable
、Maybe
、Driver
和ControlProperty
是什么,为什么它们存在? - 测试
- 技巧和常见错误
- 调试
- Rx 背后的数学
- 什么是热和冷的可观察序列?
... 安装
- 将 RxSwift/RxCocoa 集成到我的应用中。 安装指南
... 修改
- 使用示例应用。 运行示例应用
- 在使用 playgrounds 中的操作符。 Playgrounds
... 交互
- 所有这些都很好,但与其他使用 RxSwift 的人交谈并交流经验会更好。
加入 Slack 频道 - 使用库报告问题。 使用问题模板开启一个问题
- 请求新功能。 使用功能请求模板开启一个问题
- 帮助 查看贡献指南
... 比较
... 理解结构
RxSwift 与其驱动异步工作的语法一样具有可组合性。核心单元是 RxSwift 本身,而其他库可以添加用于 UI 工作、测试等。
根据以下方式相互依赖,包含五个独立的组件
┌──────────────┐ ┌──────────────┐
│ RxCocoa ├────▶ RxRelay │
└───────┬──────┘ └──────┬───────┘
│ │
┌───────▼──────────────────▼───────┐
│ RxSwift │
└───────▲──────────────────▲───────┘
│ │
┌───────┴──────┐ ┌──────┴───────┐
│ RxTest │ │ RxBlocking │
└──────────────┘ └──────────────┘
- RxSwift:RxSwift 的核心,提供 (大部分由 ReactiveX 定义的) Rx 标准。没有其他依赖。
- 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
MXCFrameworks
从RxSwift 6开始发布的每个版本都包含*.xcframework
框架二进制文件。
只需将所需的框架二进制文件拖放到目标“通用的”选项卡下的“框架、库和嵌入的内容”部分。
注意:如果您使用
RxCocoa
,请在导入RxCocoa
之前拖动RxCocoaRuntime.xcframework
。
https://github.com/Carthage/Carthage
Carthage将其添加到Cartfile
github "ReactiveX/RxSwift" "6.5.0"
$ carthage update
将Carthage作为静态库使用
Carthage默认将RxSwift构建为动态库。
如果您想使用Carthage将RxSwift构建为静态库,可以在构建之前使用以下脚本来手动修改框架类型:
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
https://github.com/apple/swift-package-manager
Swift包管理器注意:Swift包管理器中存在一个关键交叉依赖问题,影响了许多项目,包括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
拖放到项目导航器中 - 前往
项目 > 目标 > 构建阶段 > 链接二进制与库
,点击+
并选择RxSwift
,RxCocoa
和RxRelay
目标