web-dev-qa-db-ja.com

Swiftで「すべてをキャッチ」例外の詳細を印刷する方法は?

Swiftを使用するようにコードを更新していますが、 'catch all'句に一致する例外のエラー詳細を印刷する方法を知りたいです。私のポイントを説明するために、この Swift言語ガイドページ の例を少し変更しました。

do {
    try vend(itemNamed: "Candy Bar")
    // Enjoy delicious snack
} catch VendingMachineError.InvalidSelection {
    print("Invalid Selection.")
} catch VendingMachineError.OutOfStock {
    print("Out of Stock.")
} catch VendingMachineError.InsufficientFunds(let amountRequired) {
    print("Insufficient funds. Please insert an additional $\(amountRequired).")
} catch {
    // HOW DO I PRINT OUT INFORMATION ABOUT THE ERROR HERE?
}

予期しない例外をキャッチした場合、原因をログに記録できるようにする必要があります。

77
markdb314

私はちょうどそれを理解しました。 Swiftドキュメンテーションのこの行に気付きました:

Catch句でパターンが指定されていない場合、その句はエラーと一致し、errorという名前のローカル定数にバインドします。

それで、私はこれを試しました:

do {
    try vend(itemNamed: "Candy Bar")
...
} catch {
    print("Error info: \(error)")
}

そして、それは私に素敵な説明を与えました。

112
markdb314

から Swiftプログラミング言語

catch句でパターンが指定されていない場合、句はエラーを照合し、errorという名前のローカル定数にバインドします。

つまり、catch句に暗黙的なlet errorがあります。

do {
    // …
} catch {
    print("caught: \(error)")
}

あるいは、let constant_nameも有効なパターンであるように見えるため、それを使用してエラー定数の名前を変更できます(名前errorがすでに使用されている場合は、おそらく便利です)。

do {
    // …
} catch let myError {
   print("caught: \(myError)")
}
42
Arkku