Swift の「前提条件」と「アサート」の違いは何ですか? 質問する

Swift の「前提条件」と「アサート」の違いは何ですか? 質問する

Swift のprecondition(condition: Bool, message: String)との違いは何ですか?assert(condition: Bool, message: String)

どちらも同じように見えます。どのような状況でどちらを使うべきでしょうか?

ベストアンサー1

assertはテスト中の健全性チェック用であり、 は、precondition発生した場合にプログラムが適切に続行できなくなるような事態を防ぐためのものです。

例えば、assertある計算結果が妥当な範囲内にある場合、バグがあるかどうかをすぐに見つけるために を付けるかもしれません。しかし、範囲外の結果はかもしれない有効であり、重要ではないため、アプリがクラッシュすることはありません (進行状況バーに進行状況を表示するためにのみ使用していたと仮定します)。

一方、要素を取得する際に配列の添え字が有効かどうかをチェックするのは、 であるprecondition。無効な添え字を要求された場合、配列オブジェクトが次に取るべき合理的なアクションはない。しなければならないオプションではない値を返します。

ドキュメントの全文 (Xcode でオプション クリックしてみてくださいassert) precondition:

前提条件

前進するために必要な条件を確認します。

この関数を使用して、出荷コードでもプログラムの進行を妨げる条件を検出します。

  • プレイグラウンドおよび -Onone ビルド (Xcode のデバッグ構成のデフォルト) の場合: がconditionfalse と評価された場合、 を印刷した後、デバッグ可能な状態でプログラムの実行を停止しますmessage

  • -O ビルド (Xcode のリリース構成のデフォルト) の場合: conditionfalse と評価された場合、プログラムの実行を停止します。

  • -Ouncheckedビルドではcondition評価されませんが、最適化プログラムはそれを想定する場合があります。だろうと評価されますtrue。-Ounchecked ビルドでこの仮定を満たさない場合は、重大なプログラミング エラーになります。

主張する

オプションのメッセージを使用した従来の C スタイルのアサート。

この関数は、テスト中にアクティブになるが、出荷コードのパフォーマンスには影響しない内部健全性チェックに使用します。リリース ビルドでの無効な使用をチェックするには、を参照してくださいprecondition

  • プレイグラウンドおよび -Onone ビルド (Xcode のデバッグ構成のデフォルト) の場合: がconditionfalse と評価された場合、 を印刷した後、デバッグ可能な状態でプログラムの実行を停止しますmessage

  • -O ビルド (Xcode のリリース構成のデフォルト) ではcondition評価されず、効果はありません。

  • -Ouncheckedビルドではcondition評価されませんが、最適化プログラムはそれを想定する場合があります。だろうと評価されますtrue。-Ounchecked ビルドでこの仮定を満たさない場合は、重大なプログラミング エラーになります。

おすすめ記事