Swift のprecondition(condition: Bool, message: String)
との違いは何ですか?assert(condition: Bool, message: String)
どちらも同じように見えます。どのような状況でどちらを使うべきでしょうか?
ベストアンサー1
assert
はテスト中の健全性チェック用であり、 は、precondition
発生した場合にプログラムが適切に続行できなくなるような事態を防ぐためのものです。
例えば、assert
ある計算結果が妥当な範囲内にある場合、バグがあるかどうかをすぐに見つけるために を付けるかもしれません。しかし、範囲外の結果はかもしれない有効であり、重要ではないため、アプリがクラッシュすることはありません (進行状況バーに進行状況を表示するためにのみ使用していたと仮定します)。
一方、要素を取得する際に配列の添え字が有効かどうかをチェックするのは、 であるprecondition
。無効な添え字を要求された場合、配列オブジェクトが次に取るべき合理的なアクションはない。しなければならないオプションではない値を返します。
ドキュメントの全文 (Xcode でオプション クリックしてみてくださいassert
) precondition
:
前提条件
前進するために必要な条件を確認します。
この関数を使用して、出荷コードでもプログラムの進行を妨げる条件を検出します。
プレイグラウンドおよび -Onone ビルド (Xcode のデバッグ構成のデフォルト) の場合: が
condition
false と評価された場合、 を印刷した後、デバッグ可能な状態でプログラムの実行を停止しますmessage
。-O ビルド (Xcode のリリース構成のデフォルト) の場合:
condition
false と評価された場合、プログラムの実行を停止します。-Ouncheckedビルドでは
condition
評価されませんが、最適化プログラムはそれを想定する場合があります。だろうと評価されますtrue
。-Ounchecked ビルドでこの仮定を満たさない場合は、重大なプログラミング エラーになります。
主張する
オプションのメッセージを使用した従来の C スタイルのアサート。
この関数は、テスト中にアクティブになるが、出荷コードのパフォーマンスには影響しない内部健全性チェックに使用します。リリース ビルドでの無効な使用をチェックするには、を参照してください
precondition
。
プレイグラウンドおよび -Onone ビルド (Xcode のデバッグ構成のデフォルト) の場合: が
condition
false と評価された場合、 を印刷した後、デバッグ可能な状態でプログラムの実行を停止しますmessage
。-O ビルド (Xcode のリリース構成のデフォルト) では
condition
評価されず、効果はありません。-Ouncheckedビルドでは
condition
評価されませんが、最適化プログラムはそれを想定する場合があります。だろうと評価されますtrue
。-Ounchecked ビルドでこの仮定を満たさない場合は、重大なプログラミング エラーになります。