2016-06-28 7 views
2

私は素早い質問に挑戦していますが、気をつけてください。オプションの値は自動的に初期化解除されますか?

省略可能な値をnilに明示的に設定する必要がありますか? 弱くて強力なリファレンスはいかがですか? 通常の変数を手動で初期化解除する必要がある場合はどうなりますか?迅速にノーマル変数にnilを割り当てる方法がないので、誰かにそれを行う方法を教えてください。 違いは何ですか?

var someVar:String? vs var someVar:String! 

私は唯一の違いはそれらにアクセスすることです。最初のものはオプションの中の値を出力し、2番目のものは有さず、2番目の値は値がnilのときに例外をスローします。それだけの違いはありますか?

+1

これをチェックしてください。http://www.touch-code-magazine.com/swift-optionals-use-let/ – LoVo

+0

いいえ、オプションの値は自動的に初期化解除されません。彼らは「弱い」保有変数ではありません。変数を強制的にアンラップしないでください(Appleは強制的にアンラップされた変数を必要とするフレームワークを持っていますが、他のオプションがあります)代わりに 'if ... let'または' guard ... let'を使用してください。 –

答えて

4

それが明示的にゼロ

にオプションの値を設定する必要がありません、Automatic Reference Countingは、自動的にメモリを解放します。循環参照がない限り、例えば、ClassBにはClassAに対する強い参照があり、その逆もある。また、Automatic Reference Countingは、クラスのインスタンスにのみ適用され、値の型(、IntEnumなど)には適用されません。これらの値型のメモリは、親インスタンスが初期化解除されると解放されます。

違いはありますか?

var someVar:String!基本的にアクセスしたときに自動的にアンラップさoptionalである、Implicitly Unwrapped Optionalを作成します。 nilのときにImplicitly Unwrapped Optionalにアクセスすると、ランタイムエラーが発生します。

関連する問題