Build Codecov Platforms Swift 5.9 License Twitter

简介

@Awaiting 是一个 Swift @propertyWrapper,它异步地等待直到值符合谓词。

用法

任何类都可以声明一个属性为 @Awaiting,如下所示

@Awaiting var isComplete: Bool = false

然后你使用它的 投影值 来等待直到某个谓词被满足;

// Suspends until isComplete == true
_ = try await $isComplete.first(where: { $0 == true })

取消

如果任务在谓词被满足之前被取消,则会抛出 CancellationError

可选值

当可选值被包装时,你可以等待第一个非 nil 值

@Awaiting var name: String?

// Suspends until name != nil
let name = try await $name.some()

Equatable 类型

当 Equatable 类型被包装时,你可以等待第一个等于某个元素的值

@Awaiting var name: String?

// Suspends until name == "Fish"
try await $name.equals("Fish")

集合

当集合被包装时,你可以等待一个元素在某个索引处存在

@Awaiting var names = [String]()

// Suspends until names[2] exists
let name = try await $names.element(at: 2)

或等待一个元素匹配谓词

// Suspends until a name contains an element that contains 5 or more letters
let name = try await $names.element { $0.count > 5}

或等待至少 n 个元素存在

// Suspends until names.count >= 3
let nonEmpty = try await $names.first(withAtLeast: 3)

鸣谢

@Awaiting 主要由 Simon Whitty 完成。