【Swift / iOSアプリ開発】try throw do-catch swiftの例外処理をみてみる!初心者の調べ^^

iOS

Swiftのtrythrowcatchはエラーハンドリングに使われるキーワードで、例外(エラー)を投げたり(throw)、キャッチしたり(catch)するために使用します。

1. エラーを定義する (Error プロトコル)

Swiftのエラーは、Errorプロトコルに準拠した enum で定義するのが一般的です。

enum MyError: Error {
    case invalidInput
    case networkFailure
}

enumで定義するんですね^^

2. エラーをスローする (throw)

throw を使ってエラーを発生させることができます。

func validate(input: Int) throws {
    if input < 0 {
        throw MyError.invalidInput
    }
}

エラーを知らせるのも大切ですね


3. エラーを処理する (do-catch)

エラーを処理するには do ブロック内で try を使い、catch でエラーをキャッチします。

do {
    try validate(input: -1)
    print("Valid input")
} catch MyError.invalidInput {
    print("入力が無効です")
} catch {
    print("予期しないエラー: \(error)")
}

try catch ではなく doの中でtryでcatcheですね
tryは一つずつなのでしょうか?

4. エラーを無視する (try?)

try? を使うと、エラーが発生してもnilを返し、クラッシュせずに処理を進めることができます。

let result = try? validate(input: -1) // エラーが発生すると result は nil になる
print(result) // nil

try? try!は使い所ですね
nil チェックは必要なので


5. エラーを強制的に無視する (try!)

try! を使うと、エラーが発生しないことを保証する場合に、エラーハンドリングなしで実行できます。ただし、エラーが発生するとクラッシュするので注意が必要です。

try! validate(input: 1) // 問題なし(エラー発生時はクラッシュ)
print("成功!")

こちらはエラー発生でクラッシュ ! 大丈夫なはず?ということはないので。
! を使う場面はあまりないですかね。

6. 関数の戻り値としてエラーをスローする

throws をつけた関数は、エラーをスローできる関数として定義できます。

func fetchData() throws -> String {
    throw MyError.networkFailure
}

do {
    let data = try fetchData()
    print("データ取得成功: \(data)")
} catch {
    print("データ取得失敗: \(error)")
}

throwsのある関数は、tryで呼ぶのかな

ざっとみるとなかなかですね、雰囲気はわかってきました。

エラー例外処理とは?

キーワード説明
throwエラーを発生させる
throwsエラーをスローする関数を定義する
tryエラーを投げる可能性がある処理を実行する
try?エラー発生時に nil を返す
try!エラーが発生しないことを前提に実行(失敗時クラッシュ)
do-catchエラーハンドリングを行う

基本的には do-catch を使ってエラーを処理し、影響を受けたくない場合は try? を使うのが安全な方法です!という感じですね

何気なくこのあたりを入れて作っていきたいです^^/~~

お気軽にコメントください!

スパム対応のためコメント認証に数日かかることがありますが、お気軽にコメントいただけると嬉しいです^^

コメント

タイトルとURLをコピーしました