0Pricing
Swift Academy · レッスン

Resultからasync/awaitへの橋渡し

コールバックベースのResult APIを、asyncのthrowing関数に変換します。

「Resultからasync/awaitへの橋渡し」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

ようこそ

従来のコールバックベースのAPIは `Result` を返します。最新のコードではasync/awaitを使います。両者を橋渡しする作業はよく行われるため、Swiftにはそれぞれの方向に対応する明快なパターンがあります。

withCheckedThrowingContinuation

```swift func fetchAsync(url: URL) async throws -> Data { try await withCheckedThrowingContinuation { cont in fetchCallback(url) { result in cont.resume(with: result) } } } ``` `cont.resume(with: result)` は `Result` を直接受け取ります。

withCheckedContinuation(throwしない場合)

```swift func fetchAsync(url: URL) async -> Result { await withCheckedContinuation { cont in fetchCallback(url) { result in cont.resume(returning: result) } } } ```

asyncをResultに変換する

```swift func asResult(of operation: () async throws -> T) async -> Result { do { return .success(try await operation()) } catch { return .failure(error) } } let r = await asResult { try await fetch(url) } ```

asyncコンテキストでのResult.get()

```swift func process() async { let result: Result = await fetchAsync(url) do { let data = try result.get() handle(data) } catch { handle(error) } } ```

橋渡しにTask { }を使う

```swift func load() { Task { let data = try await fetchAsync(url) await MainActor.run { self.render(data) } } } ```

コールバックからAsyncStreamを作る

```swift func events() -> AsyncStream { AsyncStream { cont in let token = subscribe { event in cont.yield(event) } cont.onTermination = { _ in unsubscribe(token) } } } ```

Continuationの安全規則

• `resume` は必ず1回だけ呼び出してください。2回呼び出すと未定義動作になります • 関数が戻った後に `resume` を呼び出さないでください • デバッグ時は `withCheckedContinuation` を使って間違いを検出し、パフォーマンス上必要な場合はリリース時に `withUnsafeContinuation` を使います

UI更新にMainActorを使う

```swift await MainActor.run { label.text = data.description } // or: @MainActor func updateUI(_ d: Data) { label.text = ... } await updateUI(data) ```

Async+Resultのテスト

```swift func testFetch() async throws { let result = await asResult { try await fetchAsync(url) } switch result { case .success(let d): XCTAssertFalse(d.isEmpty) case .failure(let e): XCTFail(e.localizedDescription) } } ```

確認問題

デバッグビルドで、二重のresumeのような誤用を検出する継続の種類はどれですか?

まとめ

主なポイント: • `withCheckedThrowingContinuation` はコールバックを async throws に橋渡しします • `cont.resume(with: result)` は Result を直接受け取ります • ヘルパー関数を使って `async throws` を `Result` でラップします • `resume` は必ず1回だけ呼び出します • 非同期コンテキストから安全にUIを更新するには `MainActor.run { }` を使います コース完了です!次はSwiftUIの基礎です。

よくある質問

「Resultからasync/awaitへの橋渡し」レッスンは無料ですか?

はい。「Resultからasync/awaitへの橋渡し」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「Resultからasync/awaitへの橋渡し」で何を学びますか?

コールバックベースのResult APIを、asyncのthrowing関数に変換します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「Resultからasync/awaitへの橋渡し」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Result の基礎
  2. ResultのmapとflatMap
  3. LocalizedErrorによるカスタムエラー型
  4. Resultからasync/awaitへの橋渡し
← Swift Academyに戻る