[解決済み] swiftにおける "precondition "と "assert "の違いとは?
質問
とはどう違うのでしょうか?
precondition(condition: Bool, message: String)
と
assert(condition: Bool, message: String)
をSwiftで使うのですか?
どちらも私には同じに見えます。どのようなコンテキストで、我々は他の上に1を使用する必要がありますか?
どのように解決するのですか?
assert
はテスト時のサニティチェックのためであるのに対し
precondition
は、もしそれが起こった場合、プログラムが合理的に進行できないことを意味するものから保護するためのものです。
ですから、例えば
assert
を付けて、バグがあるかどうかすぐに分かるようにすることができます。 しかし、境界外の結果である
は
は有効であり、クリティカルではないので、アプリをクラッシュさせるべきではありません (プログレス バーの進捗状況を表示するためだけに使用したと仮定します)。
一方、要素を取得するときに配列の添え字が有効であるかどうかをチェックするのは
precondition
. であるため、無効な添え字を求められたときに配列オブジェクトが取るべき妥当な次の動作はありません。
は
は非選択的な値を返さなければならないからです。
ドキュメントからの全文 (オプションクリックを試す
assert
と
precondition
を Xcode で使用)。
前提条件
前進するための必要条件を確認する。
この関数は、出荷コードであってもプログラムの進行を妨げなければならない条件を検出するために使用します。 この機能を使って、出荷コードであってもプログラムの進行を妨げるべき条件を検出します。
プレイグラウンドと -Onone ビルド (Xcode の Debug 構成のデフォルト) では、次のようになります。 設定のデフォルト): もし
condition
が false と評価された場合、印刷後にデバッグ可能な状態でプログラムの実行を停止します。 を表示した後、デバッグ可能な状態でプログラムの実行を停止します。message
.Oビルド(XcodeのRelease設定のデフォルト)で。 もし
condition
が false と評価された場合、プログラムの実行を停止します。-Ouncheckedビルドにおいて。
condition
は評価されませんが、オプティマイザは オプティマイザは は と評価します。true
. 失敗 のビルドでこの仮定を満たさないことは,重大なプログラミングエラーです。 プログラミングのエラーです。
アサート
伝統的なC言語スタイルのアサートで、オプションでメッセージを指定できます。
この関数は、テスト中に有効だが出荷コードの性能に影響を与えない内部サニティチェックのために使用します。 この関数は、テスト中に有効であるが、出荷コードの性能には影響を与えない内部サニティチェックに使用します。 リリースビルドでの無効な使用法をチェックするためには
precondition
.
プレイグラウンドと -Onone ビルド (Xcode の Debug 構成のデフォルト) では、次のようになります。 設定のデフォルト): もし
condition
が false と評価された場合、印刷後にデバッグ可能な状態でプログラムの実行を停止します。 を表示した後、デバッグ可能な状態でプログラムの実行を停止します。message
.O ビルド(Xcode の Release 構成のデフォルト)で。
condition
は評価されないので、何の効果もありません。-Ounchecked ビルドにおいて。
condition
は評価されませんが、オプティマイザは オプティマイザは は と評価します。true
. 失敗 のビルドでこの仮定を満たさないことは,重大なプログラミングエラーです。 プログラミングのエラーです。
関連
-
[解決済み] Swiftのstatic funcとclass funcの違いは何ですか?
-
[解決済み] Swiftで#pragmaマーク?
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] Swiftでdispatch_onceのシングルトンモデルを使う
-
[解決済み] Swift: print() vs println() vs NSLog()
-
[解決済み] Swiftのクラスにおける静的関数/変数とクラス関数/変数?
-
[解決済み】なぜ、Swiftの文字列では、?のような絵文字が奇妙に扱われるのですか?
-
[解決済み] iOS isKindOfClassとisMemberOfClassの違いについて
-
[解決済み] DispatchQueue.main.asyncとDispatchQueue.main.syncの相違点
-
[解決済み] ""内の二重引用符を印刷するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Swiftがエラーを報告。アボートトラップ:6
-
Swift Error fatal error: Optional value のアンラップ中に予期せず nil を発見した。
-
Swift の Optional 値 && Optional のアンラップ時に予期せず nil が検出された場合の説明
-
swift 4.0でのdispatch_async,dispatch_afterの使用について
-
[解決済み] ""内の二重引用符を印刷するには?
-
[解決済み] Swiftで範囲を作成する方法は?
-
[解決済み] Swift: PREPROCESSORフラグ(`#if DEBUG`など)を使ってAPIキーを実装する方法とは?
-
[解決済み] Swift: インデックスで文字列配列を置換する
-
[解決済み] Swift - 複数条件でオブジェクトの配列を並べ替える
-
[解決済み] swiftにおける "precondition "と "assert "の違いとは?