13044


Swiftの  
Optional 型 - nil の代入を許す  
非 optional 型 - nil の代入を許さない  
があり、Optional型にするに「?」を使い、unwrapping(nilを排除)するのに「!」を使います。

しかし、よくあるコードで

[code]

    var mMoviewPlayerView : MPMoviePlayerController!
    
[/code]

の「!」はいまいちしっくりこないのです。  
(1) MPMoviePlayerControllerやUIViewはもともとnilがあり、それをunwappingしたものを宣言しているのか？  
(2) 宣言しているだけならば、中身はnilだと思うのですが何故エラーが出ないのでしょうか？

ご存知の方、ご教示お願いします。


CC BY-SA 3.0
2015-08-04T14:48:53.973
13042
2015-08-05T13:01:19.047
2015-08-04T14:51:56.513
208
8593
question
swift xcode optional
Optionalとunwrapping

[code]

    var mMoviewPlayerView : MPMoviePlayerController!
    
[/code]

この宣言は、`Implicitly Unwrapped
Optional`と呼ばれるものです。その名の通り、「暗黙のうちに`unrwap`が行われる`Optional`」です。

`Optional`とは値として`nil`を許容しますが、`nil`を`unrwap`して利用しようとした場合に、実行時エラーを発生させる仕組みでした。

  1. `Implicitly Unwrapped Optional`も`Optional`の一種なので`nil`を取りうることができます。そのため、宣言時に`nil`であってもエラーは起きません。
  2. `nil`と評価されている状態で、値にアクセスすると暗黙のうちに`unrwap`が発生した結果、実行時エラーとなります。

* * *

なぜ`Implicitly Unwrapped Optional`が用いられるのでしょう。

これはプログラミングするタイミングで必ず`nil`以外の値が入っていることが保証されるケースにおいて、`unrwap`や`Optional
Binding`の記述で冗長になることを防ぐためだと考えられます。

「必ず`nil`が入らないのであれば、そもそも`Optional`にする必要もない」ように感じます。

しかし`MPMoviePlayerController`のようなGUI部品は、常にメモリ上にロードされているわけではありません。`UIViewController`のライフサイクルの中で、必要に応じて初期化・解放が行われるため、このような仕組みの方が都合がよいのです。


CC BY-SA 3.0
2015-08-04T16:21:22.927
13044
2015-08-05T13:01:19.047
2015-08-05T13:01:19.047
5337
5337
13042
answer