LoginSignup
4

More than 1 year has passed since last update.

アサーションに とは

アサーションは、プログラムがある時点で満たしているべき条件を記述するための機能です。
条件が満たされていない場合はプログラムの実行を中断します。

アサーションは実行時エラーを発生させてプログラムを終了させるのですが、
実行時エラーを発生させるのはデバッグ時のみになります。

リリース時には条件式の成否によらず処理を継続します。
個人的には結構便利なんじゃないかな?と思います。

実装方法

標準ライブラリのassert()関数とassertionFailure()関数を利用します。

assert( )関数

assert( )関数は、
この関数が実行される際に満たされているべき条件を宣言するための関数です。
この関数の実行時に条件が満たされていなかった場合は実行時エラーになります。

assert( )関数の第一引数には条件式を、第二引数には終了時のメッセージを取ります。

条件式がtrueの場合は後続の処理を続け、
falseの場合は第二引数で渡したメッセージとファイル名、行番号を出力します。


let a = 10
let b = 11
assert(a == b, "aとbの値が異なります。")

実行結果
Assertion failed: aとbの値が異なります: file __lldb_expr_383/MyPlayground.playground, line 5

assertionFailure( )関数

assertionFailure( )関数は、条件式を持たない常に失敗するアサーションです。

実行されること自体が条件を満たしていないので、
第一引数にfalseを持つassert( )関数と同様です。

次のサンプルコードでは、
引数に渡された値を元に季節を出力しています。

渡された値に該当する季節がなかった場合は実行時エラーが発生します。


func printSeason(month: Int) {
    switch month {
    case 1...2, 12:
        print("冬")
    case 3...5:
        print("春")
    case 6...8:
        print("夏")
    case 9...11:
        print("秋")
    default:
        assertionFailure("1から12の値で設定してください。")
    }
}

printSeason(month: 1)
printSeason(month: 10)
printSeason(month: 100)

実行結果


Fatal error: から12の値で設定してください: file __lldb_expr_385/MyPlayground.playground, line 13

利用タイミング

デバッグ時に想定外の状況を検出する

アサーションを利用して関数が想定する値の範囲を宣言することで、
デバッグ時に想定外の値を検出することができます。

リリース時は想定外の状況でもプログラムの実行を継続する場合

リリース時でもプログラムを終了するfatalError( )関数と違い、
アサーションはリリース時には想定外の状況であってもプログラムの実行を継続します。

つまり、想定外の状況に陥った際に処理を継続するか中断するかで判断します。

以上がアサーションについても説明になります。

アサーションもfatalError( )も頻度多く起こることではないですし、
そんなに難しい処理ではないので頭の片隅に置いておく程度で良いと思います!

他のエラー処理についても記事にしているのでぜひご覧ください。
【Swift】Optional<Wrapped>型でエラー処理を行う
【Swift】Result<Success, Failure>型でエラー処理を行う
【Swift】do-catch文でエラー処理を行う(その1)
【Swift】fatalError関数によるプログラムの終了

最後までご覧いただきありがとうございました。

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
What you can do with signing up
4