RxRelay 6.7.1

RxRelay 6.7.1

测试已测试
Lang语言 SwiftSwift
许可 NOASSERTION
发布最后发布2024年5月
SPM支持 SPM

Krunoslav ZaherShai Mishali 维护。



RxRelay 6.7.1

  • 作者
  • Krunoslav Zaher

RxSwift Logo
Build Status Supported Platforms: iOS, macOS, tvOS, watchOS & Linux

Rx 是通过 Observable 接口表达的 通用计算抽象,允许您从 Observable 流中广播和订阅值和其他事件。

RxSwift 是 Reactive Extensions 标准的 Swift 特定实现。

RxSwift Observable Example of a price constantly changing and updating the app's UI

虽然这个版本旨在保持对 Rx 的原始精神和命名约定的忠实,该项目还旨在提供一个真正的 Swift 首选 API 用于 Rx API。

Cross 平台文档可以在 ReactiveX.io 上找到。

像其他 Rx 实现

RxSwift 的意图是通过 序列的抽象,使异步操作和数据流以 Observable 对象的形式以及一系列转换和组合这些异步工作片段的方法变得容易。

我来到这里是因为我想...
... 安装
  • 将 RxSwift/RxCocoa 集成到我的应用中。 安装指南
... 修改方案
... 交互
... 比较
... 理解结构

RxSwift 的结构性与它所驱动的异步工作一样。核心单元是 RxSwift 本身,而其他的依赖可以被添加以提高 UI 工作、测试等。

它由以下五个相互依赖的组件组成

┌──────────────┐    ┌──────────────┐
│   RxCocoa    ├────▶   RxRelay    │
└───────┬──────┘    └──────┬───────┘
        │                  │        
┌───────▼──────────────────▼───────┐
│             RxSwift              │
└───────▲──────────────────▲───────┘
        │                  │        
┌───────┴──────┐    ┌──────┴───────┐
│    RxTest    │    │  RxBlocking  │
└──────────────┘    └──────────────┘
  • RxSwift:RxSwift 的核心,提供由 ReactiveX (主要)定义的 Rx 标准。它没有其他依赖。
  • RxCocoa:为 iOS/macOS/watchOS & tvOS 应用开发提供 Cocoa 特定功能,如共享序列、属性等。它依赖于 RxSwiftRxRelay
  • RxRelay:提供 PublishRelayBehaviorRelayReplayRelay,围绕 Subjects 的三个简单包装。它依赖于 RxSwift
  • RxTestRxBlocking:为基于 Rx 的系统提供测试功能。它依赖于 RxSwift

用法

以下是一个示例 显示动作
定义 GitHub 仓库的搜索 ...
let searchResults = searchBar.rx.text.orEmpty
    .throttle(.milliseconds(300), scheduler: MainScheduler.instance)
    .distinctUntilChanged()
    .flatMapLatest { query -> Observable<[Repository]> in
        if query.isEmpty {
            return .just([])
        }
        return searchGitHub(query)
            .catchAndReturn([])
    }
    .observe(on: MainScheduler.instance)
... 然后将结果绑定到您的表格视图
searchResults
    .bind(to: tableView.rx.items(cellIdentifier: "Cell")) {
        (index, repository: Repository, cell) in
        cell.textLabel?.text = repository.name
        cell.detailTextLabel?.text = repository.url
    }
    .disposed(by: disposeBag)

要求

  • 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框架的二进制文件。

只需将所需的框架二进制文件拖到您的目标项目常规选项卡下的框架、库和嵌入内容部分。

注意:如果您使用的是RxCocoa,在导入RxCocoa之前,务必也拖动RxCocoaRuntime.xcframework

XCFrameworks instructions

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

注意: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拖到项目导航器中
  • 转到“项目 > 目标 > 构建阶段 > 链接二进制与库”,点击+并选择RxSwiftRxCocoaRxRelay目标

参考资料