0
2

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

Last updated at Posted at 2022-12-19

はじめに

エラー処理について3にパターン分けて記事を投稿する。

①Optional型 >>>>> 成功時は値を返し、失敗時はnilを返す
②Result型 >>>>> 成功時は値を返し、失敗時はエラーの値(詳細)を返す
③do-catch文によるエラー処理

今回は②について記載する。

下記URLの続編である。
https://qiita.com/RammaruIshii/items/6c6015daa7583384695d

詳細

  • Result型のエラー処理
    • 成功時は値を返し、失敗時はエラーの値(詳細)を返す
    • failureを表すときは対象の構造体などにErrorプロトコルを準拠させるルールがある。(Results型のfailureにwhereでErrorプロトコルを準拠するよう指示されている、気が向いたときにでも見てみてください)
Swift
//IDが登録(データが見つからない)されていない時はエラー処理(エラー詳細あり)をする

//今回のfailer時にお世話になるerror列挙体さん
enum DatabaseError: Error {
    //データが見つからないエラー
    case entryNotFound
    //重複したデータによるエラー
    case duplicatedEntry
    //不正データによるエラー
    case invalidEntry(reason: String)
}

//Resultのsuccess時に返す構造体
struct User {
    let id: Int
    let name: String
    let email: String
}

//戻り値でResult<success, failer>型のエラー処理をしているため、失敗時、retrunで .failureを返している
func findUser(byID id: Int) -> Result<User, DatabaseError> {
    let users = [
    User(id: 1, name: "山本太郎", email: "yamamoto@dmail.com"),
    User(id: 2, name: "青木小太郎", email: "aoki@gmail.com")
    ]

    for user in users {
        if user.id == id {
            return.success(user)
        }
    }

    return .failure(.entryNotFound)
}

//該当しないidをぶち込んでみる
let id = 0
let results = findUser(byID: id)

//switch文使って、これら全てのエラー(Result型のfailureですね)に対して網羅的にエラー時の動作を実装している
switch results {
    //ここの.successはUser型である。また、Result型のsuccessは型引数の連想型なので、ここのuserは自分で決めれる引数名
case let .success(user):
    print(".success\(user)")
    //ここの.failureはDatabaseError型である。また、Result型のfailureは型引数の連想型なので、ここのerrorも自分で決めれる引数名
case let .failure(error):
    switch error {
    case .entryNotFound:
        print(".failure: .entryNotFound")
    case .duplicatedEntry:
        print(".failure: .duplicatedEntry")
    case .invalidEntry(reson: let reason):
        print(".failure: .invalidEntry(\(reason)")
    }
}
//出力
//失敗の場合 .failure: .entryNotFound

//ただし成功時の場合(idを1にするなど)は下記が出力される
//.successUser(id: 1, name: "山本太郎", email: "yamamoto@dmail.com")

おわりに

修正箇所等あればご指摘ください。

参考記事

[増補改訂第3版]Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 (WEB+DB PRESS plusシリーズ) 
↑引用元
石川 洋資 (著), 西山 勇世 (著)
発行者:片岡 巌
出版社:技術評論社
印刷/製本:日経印刷株式会社

開発環境

  • Xcode-13.4.1
  • Swift version 5.7
0
2
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
2