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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- オプショナルチェーンとエラー処理の基本
- do/catchとエラーの定義(列挙型)
- Result型 — Result