0
1

エラー処理についてすごく簡単にまとめてみた#3

Last updated at Posted at 2022-12-24

はじめに

エラー処理について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文を用いずにエラーを発生させる「可能性のある」処理が可能だが、今回はそれはしません。
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
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1