Swiftのtry、throw、catchはエラーハンドリングに使われるキーワードで、例外(エラー)を投げたり(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? を使うのが安全な方法です!という感じですね
何気なくこのあたりを入れて作っていきたいです^^/~~


コメント