0
1

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

Last updated at Posted at 2022-12-10

はじめに

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

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

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

詳細

  • 成功時は値を返し、失敗時はnilを返す
Swift
//①Optional<wrapped>型 >>>>> 成功時は値を返し、失敗時はnilを返す
struct User {
    let id: Int
    let name: String
    let email: String
}

//対応するユーザーが存在しない場合はnilを返すようにする処理
//戻り値は構造体のUserオプショナル
func findUser(byID id: Int) -> User? {
    //配列usersにUserを格納
    let users = [
        //User.initのinitは省略できる
        User(id: 1,
             name: "山田太郎",
             email: "yamada@google.com"),

        User(id: 2,
             name: "鈴木小太郎",
             email: "suzuki@gmail.com")
    ]

    //in usersのusersはUser型
    for user in users {
        //後ろのidはfindUserの引数
        if user.id == id {
            return user
        }
    }

    //対応するユーザーが存在しない場合はnilを返すようにする処理
    return nil
}

//idを定義
let id = 1
//findUser関数をを使用する、findUserに該当するidでなかったらエラー処理する
//定数idを代入して該当するかしないかチェック(エラーチェック)
if let user = findUser(byID: id) { 
    print("Name: \(user.name)") // idの値は1のため、こちらが出力される
} else {
    print("Error: User not fond")
}
  • init? 失敗可能イニシャライザでエラー処理
    • 該当しなかったらインスタンス化させない
Swift
//おまけ
struct User {
    let id: Int
    let name: String
    let email: String

    init?(id: Int, name: String, email: String) {
        //文字@によって2分割する判定
        let components = email.components(separatedBy: "@")
        guard components.count == 2 else {
            return nil
        }

        self.id = id
        self.name = name
        self.email = email
    }
}

if let user = User(id: 0, name: "佐藤太郎", email: "satou.gmail.com") {
    print("Username:\(user.name)")
} else {
    print("Error: Invalid data") // 引数emailが@によって分割されていないため、こちらのError: Invalid data が出力される

}

おわりに

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

参考記事

Apple公式placeholderTextについて

[増補改訂第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