Skip to content

Instantly share code, notes, and snippets.

@yimajo
Last active November 19, 2021 16:11
Show Gist options
  • Save yimajo/6d2f8a8a3dfe908ac4b73f3ec0ed63c8 to your computer and use it in GitHub Desktop.
Save yimajo/6d2f8a8a3dfe908ac4b73f3ec0ed63c8 to your computer and use it in GitHub Desktop.
withCheckedThrowingContinuationとwithCheckedContinuationの違い
private func addItem2() async throws {
// CheckedContinuation<Void, Error>)と型書かないといけないんだなあこれが
try await withCheckedThrowingContinuation { (continuation: CheckedContinuation<Void, Error>) in
writeContext.perform {
let newItem = Item(context: writeContext)
newItem.timestamp = Date()
do {
try writeContext.save()
continuation.resume()
} catch {
continuation.resume(throwing: error)
}
}
}
}
private func addItem3() async -> Result<Void, Error> {
await withCheckedContinuation { continuation in
writeContext.perform {
let newItem = Item(context: writeContext)
newItem.timestamp = Date()
do {
try writeContext.save()
continuation.resume(returning: .success(()))
} catch {
continuation.resume(returning: .failure(error))
}
}
}
}
@yimajo
Copy link
Author

yimajo commented Nov 19, 2021

違いとか

結局呼び出し側でどうしたいか、に依存している。do catchしたいのかResultが欲しいのか。

その他

  • withCheckedThrowingContinuation
    • do catch するようなときに向いてる
    • Voidを返すというかcontinuation.resume()でVoidがTの場合専用のメソッドがある
  • withCheckedContinuation
    • Resultを引数にすればいいのでResultを返すメソッドに向いてる
      • addItem2やaddItem3ではメリットは表現できていない

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment