はじめに
エラー処理について3にパターン分けて記事を投稿する。
①Optional型 >>>>> 成功時は値を返し、失敗時はnilを返す
②Result型 >>>>> 成功時は値を返し、失敗時はエラーの値(詳細)を返す
③do-catch文によるエラー処理
今回は③について記載する。
下記URLの続編である。
https://qiita.com/RammaruIshii/items/861da45cd8c610b43341
詳細
-
do-catch文によるエラー処理
- エラーが発生する可能性のある処理をdo節内に記述する。そして、エラーが発生した場合、catch節へプログラムの制御が移る(要は、do節でエラーが起きると下で定義したcatch節内へ処理が走りますよってこと)。
-
コードを見る上で押さえておきたいキーワードなどを簡単に説明
- tryキーワード
- throwsキーワードを定義した関数などを呼び出すときに必要なキーワード。
- throwキーワード
- エラー処理を投げれる(do-catch文のcatch節へ)。
- throwsキーワード
- エラーが起こるかもしれないという可能性を示すことができる。
- エラー処理を投げる際は必ずthrowキーワードとセットで定義。
- do-chatch文を用いずにエラーを発生させる「可能性のある」処理が可能だが、今回はそれはしません。
- tryキーワード
Swift
//今回は、引数の値を3倍にして返す関数を定義し、
//エラーだった場合、列挙体のエラー処理を走らせるということdo-catch文を用いて行いたい
//エラー発生時のエラー内容
enum OperationError: Error {
case overCapacity
}
//throwsキーワード
//エラーが起こるかもしれない引数の値を3倍にして返す処理
func triple(of int: Int) throws -> Int {
guard int <= Int.max / 3 else {
throw OperationError.overCapacity
}
return int
}
let int = Int.max
do {
//catch(失敗した時にエラー処理)へ送る関数と成功したときの処理を担うdo節
//tryキーワードはthrowsキーワードを付与された処理を呼び出すときに必ず必要
let tripleOfInt = try triple(of: 3)
print("success: \(tripleOfInt)")
} catch {
//このerrorはOperationErrorのErrorプロトコルで準拠したもの
print("failuer: \(error)")
}
//出力
//success: 3
//番外編
//ちなみにdo節中のtry triple(of: )に先ほど定義した定数intを代入すると...
do {
//catch(失敗した時にエラー処理)へ送る関数と成功したときの処理を担うdo節
//tryキーワードはthrowsキーワードを付与された処理を呼び出すときに必ず必要
let tripleOfInt = try triple(of: int)
print("success: \(tripleOfInt)")
} catch {
//このerrorはOperationErrorのErrorプロトコルで準拠したもの
print("failuer: \(error)")
}
//出力
//failuer: overCapacity
おわりに
修正箇所等あればご指摘ください。
参考記事
[増補改訂第3版]Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 (WEB+DB PRESS plusシリーズ)
↑引用元
石川 洋資 (著), 西山 勇世 (著)
発行者:片岡 巌
出版社:技術評論社
印刷/製本:日経印刷株式会社
開発環境
- Xcode-13.4.1
- Swift version 5.7