AsyncExtensions 目标是一个不断增长的实用函数和类的集合,它们利用了 Swift 的新并发特性。
AsyncExtensions 包还包括 AsyncTestExtensions 目标,其中包含围绕 XCTest 断言的异步友好型包装器。
AsyncInputStream
:InputStream
的便捷包装器,允许简单、类型安全地访问流数据。AsyncOutputStream
:OutputStream
的便捷包装器,允许简单、类型安全地流式传输数据。Publisher.allValues
:从 Combine Publisher 创建一个 AsyncStream
。它缓冲发布者的所有输出,确保 AsyncStream
将产生发布者发布的所有内容。Future
:Future 的线程安全实现,在将传统 Swift 代码与使用 Swift Concurrency 的代码桥接时非常有用。Sequence.asyncMap()
和 Sequence.concurrentMap()
:允许将异步转换应用于 Sequence
的扩展。TaskStore
:Task
的线程安全存储,在从 Combine 发布者迁移到 Swift Concurrency 时可以提供帮助。TimeoutError
:一个旨在表示超时的简单错误。仿照 CancellationError
建模。AssertEqual()
AssertEqualEventually()
AssertTrue()
AssertTrueEventually()
AssertFalse()
AssertNil()
AssertNotNil()
AssertThrowsError()
AssertNoThrow()
XCTestCase.task()
XCTestCase.serialized()
XCTestCase.yield()
要使用 AsyncExtensions,请将依赖项添加到您的 Package.swift 文件中
let package = Package(
dependencies: [
.package(
url: "https://github.com/shareup/async-extensions.git",
from: "4.3.0"
)
]
)
要在测试目标中使用 AsyncTestExtensions,请将其添加为依赖项
.testTarget(
name: "MyTests",
dependencies: [
.product(name: "AsyncTestExtensions", package: "async-extensions")
]
)
AsyncExtensions 的许可证是标准的 MIT 许可证。您可以在 LICENSE 文件中找到它。
SequenceExtensions 在很大程度上受到了 John Sundell 在 https://github.com/JohnSundell/CollectionConcurrencyKit 处的 CollectionConcurrencyKit 的启发。
主要的串行执行器 XCTestCase 扩展取自 Point-Free 在 https://github.com/pointfreeco/swift-concurrency-extras 处的 swift-concurrency-extras。