Rx 是通过 Observable<Element>
界面表述的计算泛型抽象,它允许你从 Observable
流中广播和订阅值和其他事件。
RxSwift 是 Reactive Extensions 标准的 Swift 特定实现。
虽然这个版本旨在忠于 Rx 的原初精神和命名约定,但这个项目还旨在为 Rx API 提供一个真正的 Swift-first 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定义的标准(主要是)。它没有任何其他依赖项。
- RxCocoa:为一般iOS/macOS/watchOS 以及 tvOS 应用开发提供特定的 Cocoa 能力,例如共享序列、特性等。它依赖于
RxSwift
和RxRelay
。 - RxRelay:提供
PublishRelay
、BehaviorRelay
和ReplayRelay
三种围绕 Subject 的简单包装。它依赖于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
拖动到项目导航器中 - 前往
项目 > 目标 > 构建阶段 > 与二进制链接库
,点击+
并选择RxSwift
、RxCocoa
和RxRelay
目标
参考
- http://reactivex.io/
- Reactive Extensions GitHub (GitHub)
- RxSwift RayWenderlich.com 书籍
- RxSwift: 揭露困难的神话 (YouTube)
- Boxue.io RxSwift 在线课程 (中文)
🇨🇳 ) - 专家对专家:Brian Beckman 和 Erik Meijer - .NET Reactive Framework(Rx)内部 (视频)
- 响应式编程概述 (Netflix 的 Jafar Husain)
- Subject/Observer 是 Iterator 的对立面 (论文)
- Rx 标准序列操作符可视化 (可视化工具)
- Haskell