エラー処理は、プログラム実行によるエラー状態に対応することです。

関数の成功または失敗による値の有無を扱えるオプショナルとは対照的に、エラー処理では失敗の原因を特定し、必要であれば、プログラムの他の部分にエラーを伝えることができます。

関数でエラーの状態になったとき、関数はエラーを投げます。その関数の呼び出し元は、エラーをキャッチし、適切に処理することができます。

func canThrowAnError() throws {
    // この関数はエラーを投げることがある
}

関数は、宣言に throws キーワードを含めて、エラーを投げることがあると示します。エラーを投げる可能性がある関数を呼び出すとき、try キーワードを前に置きます。

Swift は、catch で処理されるまで自動的に、現在のスコープの外にエラーを伝えます。

do {
    try canThrowAnError()
    // エラーは投げられなかった
} catch {
    // エラーが投げられた
}

do 文は新しいスコープを作り、1 つ以上の catch に対しエラーを伝えます。

これは、異なるエラー状態に対応しているエラー処理の例です。

func makeASandwich() throws {
    // ...
}

do {
    try makeASandwich()
    eatASandwich()
} catch Error.OutOfCleanDishes {
    washDishes()
} catch Error.MissingIngredients(let ingredients) {
    buyGroceries(ingredients)
}

この例では、きれいなお皿が無いか、または材料が不足している場合に、関数 makeASandwich() がエラーを投げます。makeASandwich() がエラーを投げることがあるので、関数の呼び出しが try でラップされています。関数の呼び出しを do 文で囲むことで、投げられたエラーが catch に伝えられます。

エラーが無かった場合は、eatASandwich() 関数が呼び出されます。エラーが投げられ、Error.OutOfCleanDishes に一致する場合は、washDishes() 関数が呼び出されます。エラーが投げられて、Error.MissingIngredients に一致する場合は、catch パターンで取得した [String] 値を伴って buyGroceries(_:) 関数が 呼び出されます。

エラーついての詳細は、Error Handling でカバーされています。


Portions of this page are translations based on work created and shared by Apple and used according to terms described in the Creative Commons Attribution 4.0 International License.