見出し画像

【Swift】エラーハンドリングについて/エラーを起こす可能性のあるメソッドの書き方と呼び出し方について

今思うとエラーを引き起こす可能性があるメソッドはこの書き方で書いておけばよかったなと思うことがありました。

早いうちに学んでおいた方がよかった内容です。

今回は勉強した内容を備忘録としてまとめておきます。

import UIKit // playgroundsでUIKitをimportする場合はPlatformをiOSに変更する

enum CalcError : Error {
   case HandredError
   case ZeroError
}


// エラーが起こる可能性なのでthrowsと記載する。
func calc (value: Int) throws -> Int {
   guard value == 100 else { throw CalcError.HandredError}
   guard value == 0 else { throw CalcError.ZeroError}
   
   return value * value
}

// try!は実行時エラーでクラッシュする 基本的にはあまり使用しない。
let result = try! calc(value: 0)

// try?は実行時エラーでクラッシュしないが戻り値でnilを許容する。(オプショナル型)
// こちらの方法で問題ないように思えるが、エラーの内容を受け取ることができない。
let resultOptional = try? calc(value: 100)


// エラーが起こる可能性のあるメソッドを呼び出し、エラーハンドリングを行えるメソッドの呼び出し方
do {
   let getResult = try calc(value: 3)
   print(getResult)
} catch let error as CalcError {
   switch error {
   case .HandredError:
       print("100が引数として設定されている")
   case .ZeroError:
       print("0が引数として設定されている")
   }
} catch {
   print("CalcErrorではない何かしらのエラー")
}

この記事が気に入ったらサポートをしてみませんか?