RxBlocking 6.7.1

RxBlocking 6.7.1

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

Krunoslav ZaherShai Mishali 维护。



  • 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 API 提供真正的 Swift 首选 API。

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

与其他 Rx 实现一样,RxSwift 的目的是使异步操作和数据流以 Observable 对象的形式以及一系列转换和组合这些异步工作片段的方法的简单组合变得容易。

KVO 观察、异步操作、UI 事件和其他数据流都在 序列抽象 下统一。这就是为什么 Rx 是如此简单、优雅和强大的原因。

我来这里是因为我想...

...理解
... 安装
  • 将 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)
然后将结果绑定到您的 tableview
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

MXCFrameworks

从RxSwift 6开始发布的每个版本都包含*.xcframework框架二进制文件。

只需将所需的框架二进制文件拖放到目标“通用的”选项卡下的“框架、库和嵌入的内容”部分。

注意:如果您使用RxCocoa,请在导入RxCocoa之前拖动RxCocoaRuntime.xcframework

XCFrameworks instructions

Carthagehttps://github.com/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

Swift包管理器https://github.com/apple/swift-package-manager

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

引用