OperationAwaiting

等待对 Foundation 的 Operation 的支持。

使用示例

struct OperationNotStarted : Error {}

final class MyOperation : Operation, HasResult {

   var result: Result<Int, Error> = .failure(OperationNotStarted())

   override func main() {
      result = .success(42)
   }

}

let q = OperationQueue()
let op = MyOperation()
/* op.result is a failure, set to OperationNotStarted() */
let r = try await q.addOperationAndGetResult(op)
/* op.result is now a success, equal to r (equal to 42) */

关于函数命名

所有函数都有一个短名称(可能不明确)和一个较长的、明确的名称。

示例startstartAndGetResult 方法。 当上下文清晰时,Swift 可以猜测您想要调用的 start 方法是 Operation 上符合 HasResult 协议的方法,并且您想要在操作完成后获取结果。 但是,这并非总是有效。 特别是,即使 op 符合 HasResult 协议,以下代码也会将变量设置为 ()

let r = try await op.start()