1

オブジェクトインスタンスの関数を呼び出すと、オブジェクトが存在しない可能性があります(オプションのタイプ)。オブジェクト名の後ろに感嘆符を付ける代わりに、オブジェクト名の後ろに常に疑問符を付けることができ、クラッシュしないようです。

window!.rootViewController = containerViewController // forced unwrapping

// Can change to question mark and not crash. 
window?.rootViewController = containerViewController // Optional chaining

強制的なアンラップを使用する代わりに、オプションのチェーンを使用するようにいつでも変更でき、結果は同じですか? はいの場合、違いは何ですか?

4

1 に答える 1

1

違いは、使用?すると、 window が nil のときに実行されることもあれば、そうでないときに実行されることもあると述べていることです。つまり、nil を持つことwindowは有効な期待です。

つまり、window?ウィンドウが nil である場合とそうでない場合があることを示します。これは、.rootViewController = containerViewControllerwindow が nil であるため、 が実行されない可能性があることを意味します。

の場合、これが実行され、アプリがクラッシュすることはありませwindownil

ただし、を使用すると、アプリケーションは常にそうではないかのように!扱うように指示されます。ではない場合、ステートメントは正しく実行されますが、そうである場合アプリケーションはクラッシュします。windownilwindownilnil

結論として、次を使用します。

window!.rootViewController = containerViewController

設定するためにウィンドウが常に有効であることを期待する場合rootViewController

そして使用:

window?.rootViewController = containerViewController

ウィンドウの状態と、その状態に基づいてステートメントを実行する必要があるかどうかが気になる場合。

于 2015-05-19T11:10:58.903 に答える