Swift Async Algorithms 是一个开源软件包,包含异步序列和高级算法,这些算法涉及并发及其相关类型。
该软件包有三个主要目标
async/await
的一流集成AsyncAlgorithms 是一个用于处理 *随时间变化的值* 的算法包。 这包括主要关于 *时间* 的算法,例如 debounce
和 throttle
,但也包括关于 *顺序* 的算法,例如 combineLatest
和 merge
。 处理多个输入的运算(例如 zip
在 Sequence
上所做的)在实现上可能出人意料地复杂,具有微妙的行为和需要考虑的许多边缘情况。 一个共享包可以正确地处理这些细节,并进行广泛的测试和文档记录,从而使所有 Swift 应用程序受益。
AsyncAlgorithms 的基础包含在 Swift 5.5 中,来自 AsyncSequence。 Swift 5.5 还带来了使用自然的 for/in
循环和 await
来处理 AsyncSequence
中的值,以及类似于 Sequence
的 API,例如 map
和 filter
的能力。 结构化并发允许我们编写代码,其中中间状态只是一个局部变量,可以直接在 throw
的函数上使用 try
,并且通常以类似于同步代码的方式处理异步代码的逻辑。
该软件包是这些 API 的所在地。 开发和 API 设计在 GitHub 和 Swift 论坛上进行。
chain(_:...)
: 连接两个或多个具有相同元素类型的异步序列。combineLatest(_:...)
: 将两个或多个异步序列组合成一个异步序列,该异步序列生成来自这些基本异步序列的元素元组,并在任何基本序列产生值时更新。merge(_:...)
: 将两个或多个异步序列合并为一个异步序列,产生所有底层异步序列的元素。zip(_:...)
: 创建一个由底层异步序列构建的配对异步序列。joined(separator:)
: 连接异步序列的异步序列的元素,并在每个元素之间插入给定的分隔符。async
: 从同步序列创建一个异步序列。AsyncChannel
: 具有反压发送语义的异步序列。AsyncThrowingChannel
: 具有反压发送语义的异步序列,可以发出失败。AsyncBufferedByteIterator
: 一种高效的迭代器,可用于迭代从异步读取函数派生的字节序列。adjacentPairs()
: 收集相邻元素的元组。chunks(...)
和 chunked(...)
: 将值收集到块中。compacted()
: 从异步序列中删除 nil 值。removeDuplicates()
: 删除连续相邻的重复值。interspersed(with:)
: 在异步序列的每两个元素之间放置一个值。debounce(for:tolerance:clock:)
: 在达到静止期后发出值。throttle(for:clock:reducing:)
: 确保事件之间经过了最短间隔。AsyncTimerSequence
: 在给定的时间间隔重复发出现在的值。RangeReplaceableCollection.init(_:)
: 创建一个包含异步序列元素的新集合实例。Dictionary.init(uniqueKeysWithValues:)
: 从给定异步序列中的键值对创建一个新字典。Dictionary.init(_:uniquingKeysWith:)
: 从给定异步序列中的键值对创建一个新字典,并使用组合闭包来确定任何重复键的值。Dictionary.init(grouping:by:)
: 创建一个新字典,其键是由给定闭包返回的分组,其值是返回每个键的元素的数组。SetAlgebra.init(_:)
: 从异步序列项创建一个新集合。每个算法都有特定的行为效果。 对于抛出效果,这些可以是序列抛出,不抛出或重新抛出错误。 某些异步序列中的可发送性效果是有条件的,而另一些异步序列则要求所有组成的部件都是可发送的,以满足 Sendable
的要求。 这些效果 在此处列出。
要在 SwiftPM 项目中使用 AsyncAlgorithms
库,请将以下行添加到 Package.swift
文件中的依赖项中
.package(url: "https://github.com/apple/swift-async-algorithms", from: "1.0.0"),
将 "AsyncAlgorithms"
作为可执行目标的依赖项包含在内
.target(name: "<target>", dependencies: [
.product(name: "AsyncAlgorithms", package: "swift-async-algorithms"),
]),
最后,将 import AsyncAlgorithms
添加到您的源代码中。
swift-async-algorithms
目录中,分别运行 swift build
或 swift test
swift
可执行文件位于二进制搜索路径环境变量 ($PATH
) 中的路径swift-async-algorithms
目录中,分别运行 swift build
或 swift test
Swift Async Algorithms 包的目标是尽快实现源码稳定; 版本号将遵循 语义化版本控制。 对公共 API 的源码破坏性更改只能在新主要版本中出现。
swift-async-algorithms
包 1.0 版本的公共 API 将由 AsyncAlgorithms
模块中标记为 public
的非下划线声明组成。 不属于公共 API 的接口可能会在任何版本(包括补丁版本)中继续更改。
包的未来次要版本可能会根据需要对这些规则进行更改。
我们希望该软件包能够快速采纳与其任务相关的 Swift 语言和工具链的改进。 因此,我们预计此软件包的新版本会不时要求客户端升级到更新的 Swift 工具链版本。 要求新的 Swift 版本只会要求一个次要版本升级。