特殊な条件を満たせない場合に、コードの実行を続けることができないケースがあります。コードにアサーションを置くことで、コードの実行を停止し、空や不正な値の原因を調査(デバッグ)できるようになります。

アサーションによるデバッグ

アサーションは、ブール条件が true であることを評価する実行時のチェックで、ある条件が true であると表明するものです。アサーション以降の処理を実行する前に、重要な条件が満たされているかを確認するためにアサーションを使用します。条件が true と評価される場合には、通常どおりコードが実行されます。条件が false と評価された場合には、コードの実行が停止し、アプリケーションが終了します。

アプリケーションを Xcode でビルドして実行する場合など、デバッグ環境で実行している間はアサーションが動作します。不正な状態となった場所を確認し、アサーションによって停止した時点でのアプリケーションの状態を調査することができます。また、アサーションは適切なデバッグメッセージを表示します。

Swift 標準ライブラリのグローバル関数 assert(_:_file:line:) を呼び出してアサーションを記述します。true または false と評価される式と、false のときに表示されるメッセージをこの関数に渡します。

let age = -3
assert(age >= 0, "A person's age cannot be less than zero")
// age が 0 以上でないため、アサーションが作動

この例では、age >= 0 が true と評価される、つまり age が負の値でない場合のみコードの実行が継続されます。この例のように age の値がマイナスで、age >= 0が false と評価される場合は、アサーションが作動し、アプリケーションが終了します。

次の例のように、アサーションメッセージを省略することができます。

assert(age >= 0)
NOTE
Xcode でアプリケーションのターゲットを Release に設定してビルドするときのように、コードが最適化してコンパイルされるときには、アサーションは作動しません。

いつアサーションを使用するか

条件が false になる可能性がある場面でアサーションを使用しますが、コードの実行を継続させるためには true でなければなりません。アサーションによるチェックが適しているのは、以下のようなシナリオです。

  • カスタム実装のサブスクリプトに整数インデックスが渡されるが、インデックス値が小さすぎる、または大きすぎる
  • 関数に値が渡されるが、不正な値でタスクを遂行できない
  • オプショナル値が現時点で nil だが、正常に実行するには後続のコードでは nil でない値が必要不可欠である

Subscripts および Functions についても確認してください。

NOTE
アサーションは、アプリケーションを終了します。アサーションは、不正な状態が起こらないようコードを設計することに代わるものではありません。それでもやはり、不正な状態になりえるような状況では、アサーションは、アプリケーション公開前の開発時にそのような状態になりえることに気付くための効果的な手段です。

Portions of this page are translations based on work created and shared by Apple and used according to terms described in the Creative Commons Attribution 4.0 International License.