AsyncExtensions

4.3.0

Useful extensions built upon Swift Concurrency used in our https://new.space/app iOS app
shareup/async-extensions

What's New

v4.3.0

2023-09-13T16:15:01Z
  • Update to Swift 5.9
  • Add XCTestCase.serialized() and XCTestCase.yield() for easy and reliable async tests
  • Add Publisher.asyncValues to create an AsyncStream that only holds onto the most recent value

AsyncExtensions

The AsyncExtensions target is a growing collection of useful functions and classes that take advantage of Swift's new Concurrency features.

The AsyncExtensions package also inlcudes the AsyncTestExtensions target, which contains async-friendly wrappers around XCTest assertions.

AsyncExtensions includes

  • AsyncInputStream: A convenient wrapper around InputStream allowing for simple, type-safe access to stream data.
  • AsyncOutputStream: A convenient wrapper around OutputStream allowing for simple, type-safe streaming of data.
  • Publisher.allValues: Creates an AsyncStream from a Combine Publisher. It buffers all of the publisher's output, ensuring the AsyncStream will produce everything the publisher publishes.
  • Future: A thread-safe implemention of a future that is useful when briding traditional Swift code with code employing Swift Concurrency.
  • Sequence.asyncMap() and Sequence.concurrentMap(): Extensions allowing for applying async transformations to Sequence.
  • TaskStore: A thread-safe store for Task, which can help when migrating from Combine publishers to Swift Concurrency.
  • TimeoutError: A simple error intending to represent a timeout. Modelled after CancellationError.

AsyncTestExtensions includes

  • AssertEqual()
  • AssertEqualEventually()
  • AssertTrue()
  • AssertTrueEventually()
  • AssertFalse()
  • AssertNil()
  • AssertNotNil()
  • AssertThrowsError()
  • AssertNoThrow()
  • XCTestCase.task()
  • XCTestCase.serialized()
  • XCTestCase.yield()

Installation

To use AsyncExtensions, add a dependency to your Package.swift file:

let package = Package(
  dependencies: [
    .package(
      url: "https://github.com/shareup/async-extensions.git",
      from: "4.3.0"
    )
  ]
)

To use AsyncTestExtensions in a test target, add it as a dependency:

.testTarget(
  name: "MyTests",
  dependencies: [
    .product(name: "AsyncTestExtensions", package: "async-extensions")
  ]
)

License

The license for AsyncExtensions is the standard MIT licence. You can find it in the LICENSE file.

SequenceExtensions were heavily inspired by CollectionConcurrencyKit by John Sundell at https://github.com/JohnSundell/CollectionConcurrencyKit.

The main serial executor XCTestCase extensions were taken from swift-concurrency-extras by Point-Free at https://github.com/pointfreeco/swift-concurrency-extras.

Description

  • Swift Tools 5.9.0
View More Packages from this Author

Dependencies

Last updated: Thu Nov 07 2024 10:40:14 GMT-1000 (Hawaii-Aleutian Standard Time)