wiftクリア-Error Handling
プログラムエラーに応答してリカバリするプロセス
一部の操作(ディスクファイルI/Oなど)では、必ずしも実行が完了したり、有用な出力が生成されたりすることは保証されません.
このとき,適切な応答を得るためには,誤りの原因を容易に見つけることができる.
SWIFTにおけるエラー処理は、CocoおよびObjective-Cにおける
エラーは関連値を使用してエラー特性に関する詳細情報を提供
エラーが発生した場合は、周辺コードがエラー処理を担当します
SWIFTのエラー処理方法は大きく4つに分けられます.この関数を呼び出すコードにエラーが伝播しました( エラーを外部値に変換( エラーが発生しないことを確信(
SWIFTでのエラー処理は他言語でのエラー処理とは異なります.
コールスタックのキャンセルは含まれず、計算コストが高い
したがって、
モードがない場合は、すべてのエラーが格納され、エラーはThrowing Function需要 Throwing Function 処理されずに範囲の上部に伝播した場合、実行時にエラーが発生します
Throwing Functionでエラーが発生しないことを知っている場合は、エラーが発生した場合、実行時にエラーが発生します
一部の操作(ディスクファイルI/Oなど)では、必ずしも実行が完了したり、有用な出力が生成されたりすることは保証されません.
このとき,適切な応答を得るためには,誤りの原因を容易に見つけることができる.
Errorの相互運用性
SWIFTにおけるエラー処理は、CocoおよびObjective-Cにおける
NSError
を用いたエラー処理モードと相互に動作するRepresenting and Throwing Errors
エラーは
Error
プロトコルに準拠する値タイプです.enum
エラー条件のモデリングに特に適しているenum VendingMachineError: Error {
case invalidSelection
case insufficientFunds(coinsNeeded: Int)
case outOfStock
}
throw VendingMachineError.insufficientFunds(coinsNeeded: 5)
// 코인이 5개 더 필요하다는 것을 쉽게 인지
Handling Errors
エラーが発生した場合は、周辺コードがエラー処理を担当します
SWIFTのエラー処理方法は大きく4つに分けられます.
throw
)do-catch
使用文法try?
)try!
)throwの性能
SWIFTでのエラー処理は他言語でのエラー処理とは異なります.
コールスタックのキャンセルは含まれず、計算コストが高い
したがって、
throw
の性能はreturn
と類似している.Propagating Errors Using Throwing Functions
throws
関数宣言のパラメータ部分にキーワードを書き、エラーが発生したことを宣言します.throws
キーワードとして宣言された関数をThrowing Functionと呼ぶfunc canThrowErrors(...) throws -> String
func cannotThrowErrors(...) -> String
非Throwing Function関数は、関数内部で発生する可能性のあるすべてのエラーを処理する必要があります.Handling Errors Using Do-Catch
do-catch
構文を使用してコードブロックでエラーを処理catch
処理するエラーは、モードの後に選択できます.モードがない場合は、すべてのエラーが格納され、エラーは
error
という領域定数にバインドされます.do-catch
処理されていないエラーが周囲に伝播しますdo-catch
構文または呼び出しの関数処理エラーdo-catch
構文処理エラーConverting Errors to Optional Values
try?
を使用してエラーを外部値に変換let weatherJsonData = fetchData()
let weather = try? JSONDecoder().decode(Weather.self, weatherJsonData)
print(weather)
// if decode success - Optional(weather)
// if decode fail - nil
Disabling Error Propagation
Throwing Functionでエラーが発生しないことを知っている場合は、
try!
を使用して呼び出しをブロックできます.Specifying Cleanup Actions
defer
構文は、現在のコードブロックがthrow
によって終了されるか、またはreturn
およびbreak
によって終了される前に呼び出される.defer
構文のシフトを制御できます(return
,...)エラーを発生できませんdefer
構文はコードの順序とは逆ですReference
この問題について(wiftクリア-Error Handling), 我々は、より多くの情報をここで見つけました https://velog.io/@yy0867/Swift-정리-Error-Handlingテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol