Swiftで「catchall」例外の詳細を印刷するにはどうすればよいですか?


84

Swiftを使用するようにコードを更新していますが、「catchall」句に一致する例外のエラーの詳細を出力する方法を知りたいと思っています。私のポイントを説明するために、この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?
}

予期しない例外が発生した場合は、その原因について何かをログに記録できる必要があります。

回答:


121

私はそれを理解しました。Swiftのドキュメントでこの行に気づきました。

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

だから、私はこれを試しました:

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

そしてそれは私に素晴らしい説明を与えました。


47

スウィフトプログラミング言語

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

つまりlet errorcatch句には暗黙的なものがあります。

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

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

do {
    // …
} catch let myError {
   print("caught: \(myError)")
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.