RxTest 6.7.1

RxTest 6.7.1

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

Krunoslav ZaherShai Mishali维护。



RxTest 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的原始精神和命名约定,但这个项目也旨在为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(https://reactivex.io)定义的Rx标准(大部分情况)。它没有其他依赖。
  • RxCocoa:提供针对iOS/macOS/watchOS & tvOS应用开发的本特定能力,例如共享序列(Shared Sequences)、特性(Traits)等。它依赖于RxSwiftRxRelay
  • RxRelay:提供PublishedRelayBehaviorRelayReplayRelay,三个围绕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

XC框架

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

注意:存在一个影响包括 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 目标

参考