Rx是一个Observable<Элемент>
接口表达的计算泛型抽象,让你可以从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(https://reactivex.io)定义的Rx标准(大部分情况)。它没有其他依赖。
- RxCocoa:提供针对iOS/macOS/watchOS & tvOS应用开发的本特定能力,例如共享序列(Shared Sequences)、特性(Traits)等。它依赖于
RxSwift
和RxRelay
。 - RxRelay:提供
PublishedRelay
、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
XC框架
RxSwift 6及以后的每次版本发布中都包括 *.xcframework
框架二进制文件。
只需将所需的框架二进制文件拖放到您的靶目标的 通用 选项卡下的 框架、库和嵌入内容 部分。
注意:如果您正在使用
RxCocoa
,在导入RxCocoa
之前,请务必也拖动 RxCocoaRuntime.xcframework。
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
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
目标