@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 类型被包装时,你可以等待第一个等于某个元素的值
@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 完成。