RxCocoa 6.7.1

RxCocoa 6.7.1

测试已测试
语言语言 SwiftSwift
许可 NOASSERTION
发布上次发布2024年5月
SPM支持 SPM

Krunoslav ZaherShai Mishali 维护。



 
依赖关系
RxSwift= 6.7.1
RxRelay= 6.7.1
 

RxCocoa 6.7.1

  • 作者:
  • Krunoslav Zaher

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

Rx 是通过 Observable<Element> 界面表述的计算泛型抽象,它允许你从 Observable 流中广播和订阅值和其他事件。

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

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

虽然这个版本旨在忠于 Rx 的原初精神和命名约定,但这个项目还旨在为 Rx API 提供一个真正的 Swift-first API。

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

与其他 Rx 实现一样,RxSwift 的意图是使异步操作的简单组合和数据流容易实现,这些操作和数据流以 Observable 对象的形式表示,并提供一系列方法来转换和组合这些异步工作的片段。

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

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

...理解
... 安装
  • 将RxSwift/RxCocoa集成到我的应用程序中。 安装指南
... 搭建
... 交互使用
... 比较
... 理解结构

RxSwift的结构和它驱动的异步工作一样简洁。核心单元是RxSwift本身,而其他依赖项可以用于UI工作、测试等。

它由以下五个相互依存的独立组件组成:

┌──────────────┐    ┌──────────────┐
│   RxCocoa    ├────▶   RxRelay    │
└───────┬──────┘    └──────┬───────┘
        │                  │        
┌───────▼──────────────────▼───────┐
│             RxSwift              │
└───────▲──────────────────▲───────┘
        │                  │        
┌───────┴──────┐    ┌──────┴───────┐
│    RxTest    │    │  RxBlocking  │
└──────────────┘    └──────────────┘
  • RxSwift:RxSwift的核心,提供由ReactiveX定义的标准(主要是)。它没有任何其他依赖项。
  • RxCocoa:为一般iOS/macOS/watchOS 以及 tvOS 应用开发提供特定的 Cocoa 能力,例如共享序列、特性等。它依赖于 RxSwiftRxRelay
  • RxRelay:提供 PublishRelayBehaviorRelayReplayRelay 三种围绕 Subject 的简单包装。它依赖于 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

XCFrameworks

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

只需将所需的框架二进制文件拖放到目标“General”标签下的“Frameworks, Libraries, and Embedded Content”部分。

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

XCFrameworks instructions

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

参考