Add transformed
operation to Future
#4051
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
This adds a new operation to our fork of
Future
,transformed(with:)
. This will allow us to apply a simple synchronous transform to aPromise
value.Note
Our implementation of
Future
is quoted to being taken from Swift by Sundell. This implementation oftransformed(with:)
also comes from the same source.Here is the author's blog post with some more details.
At its core, this unlocks basic functionally for transforming a
Promise
value:At a practical level, this unlocks type erasure of
Future
values. Here's a simple example:In this scenario, the
getRandomAnimal()
function would get a compile error:However, we fix that error bellow using
.transformed { $0 as Animal }
Motivation
Unlocks type erasure of
Future
values.Testing
Added a bunch of unit tests for
Async.swift
!Changelog
N/a - these methods are all behind a
@_spi(STP)
class.