0Pricing
Swift Academy · レッスン

Result型 — Result<T, Error>

Result を使って、スローせずに成功または失敗を表現します。Resultを作成してswitchで処理し、map/flatMapを使い、throwsとの相互変換も行います。

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

Resultを使う理由

目標: Result<T, Error>を使って成功または失敗を明示的に返します。コールバックや、throwsを使わないAPIに適しています。

Resultの作成

throwする代わりに、.success(value)または.failure(error)を作成します。

enum ParseError: Error { case badInt }
func parseInt(_ s: String) -> Result<Int, Error> {
    if let n = Int(s) { return .success(n) }
    else { return .failure(ParseError.badInt) }
}
print(parseInt("42"))
print(parseInt("nope"))

Resultをswitchする

switchで結果を処理すると、成功と失敗の経路を明確に保てます。

let r = parseInt("10")
switch r {
case .success(let n): print("number =", n)
case .failure(let e): print("error:", e)
}

Resultの変換

mapで成功を変換し、flatMapでResultを生成する処理を連鎖させ、mapErrorでエラーを変換します。

let r1 = parseInt("5").map { $0 * 2 }              // Result<Int, Error>
let r2 = parseInt("x").map { $0 * 2 }                    // still .failure
let r3 = parseInt("8").flatMap { n in                    // chain Results
    n % 2 == 0 ? .success(n/2) : .failure(ParseError.badInt)
}
let rErr = parseInt("x").mapError { $0 }                 // transform error type if needed
print(r1, r2, r3, rErr)

ThrowsからResultへ

Result { try ... }を使用すると、throwする呼び出しをResultとして自動的に取得できます。

enum LoadError: Error { case notFound }
func load(text name: String) throws -> String {
    guard name == "ok" else { throw LoadError.notFound }
    return "loaded"
}
// Build a Result from a throwing call:
let res = Result { try load(text: "ok") }     // .success("loaded")
let res2 = Result { try load(text: "missing") } // .failure(LoadError.notFound)
print(res, res2)

Resultからthrowsへ

get()を呼び出すと、Resultからエラーを再throwできます。これにより、throwするコードに戻せます。

let outcome = parseInt("12")
do {
    let value = try outcome.get()   // throws if .failure
    print("value =", value)
} catch {
    print("thrown from get():", error)
}

Resultの意味

確認: Result<T, Error>は何を表しますか?

まとめ

まとめ: Resultの値を作成し、switchで処理します。map/flatMap/mapErrorで変換し、Result { try ... }イニシャライザとget()を使ってthrowsとの間を橋渡しします。

よくある質問

「Result型 — Result<T, Error>」レッスンは無料ですか?

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

「Result型 — Result<T, Error>」で何を学びますか?

Result を使って、スローせずに成功または失敗を表現します。Resultを作成してswitchで処理し、map/flatMapを使い、throwsとの相互変換も行います。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「Result型 — Result<T, Error>」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. オプショナルチェーンとエラー処理の基本
  2. do/catchとエラーの定義(列挙型)
  3. Result型 — Result
← Swift Academyに戻る