こんにちは。きんくまです。
Optional型は2種類あります。
? -> normal optional 通常のオプショナル
! -> Implicitly Unwrapped Optional 暗黙にアンラップされるオプショナル
で、前もこんな記事書いたりしたんだけど、イマイチわかってなかったです。
で、もう一回ドキュメントをちゃんと読んだらなんとなく使い分け方がわかったような気がする。
使い分けかた
? normal optional 通常のオプショナル |
! Implicitly Unwrapped Optional 暗黙にアンラップされるオプショナル |
---|---|
実行中にnilになる可能性がある | 宣言時に一瞬nilになることはあっても、一度値が代入されたらその後はnilになることはまずない |
アンラップしたり、nilチェックを常にしながら使う。 | nilチェックはやろうと思えば可能だが、基本的に中に値が入っているという前提なのでやる必要はあまりない(逆にいえば中に値が入らない状態が多いのであればnormal optionalにすべき) |
最後のNOTEのところにこう書いてあります。
Do not use an implicitly unwrapped optional when there is a possibility of a variable becoming nil at a later point. Always use a normal optional type if you need to check for a nil value during the lifetime of a variable.
後でnilになる可能性のある変数は、implicitly unwrapped optionalを使わないように。もし変数が生きている間にnilチェックが必要ならば、常にnormal optionalを使うこと。
だからimplicitly unwrapped optionalの使い所としては、
・宣言したあとすぐに目につくところで値が代入される変数(なんらかの理由で宣言と同時に代入ができない)
・インスタンス変数の一部(@IBOutletとか)
かな。なので、どうして@IBOutletつき変数の最後に!がついているのかがわかった気がする。つまりこの変数は、
1. ViewController生成時(init)はまだそのインスタンス変数は接続されてなくて値がnilの状態
2. loadViewでStroyboardのコンポーネントから自動接続される。(値がある)
というやつなので、一瞬だけnilになる瞬間がある。だから ! の方にしているんだなと。
(そしてViewControllerが生きている間はnilになることはない)
■ 自作iPhoneアプリ 好評発売中!
・フォルメモ - シンプルなフォルダつきメモ帳
・ジッピー電卓 - 消費税や割引もサクサク計算!
■ LINEスタンプ作りました!
毎日使える。とぼけたウサギ