いろいろ調べて見た結果下記のようなことなのかなぁと思った次第。
取り合えずメモ代わりに。
Optional変数
- swiftの変数はいわゆるC++などで言うリファレンス。
- 何も参照していない変数は、nilが入っている。
- が、普通に宣言した変数にnilを入れることができない。
- 宣言時に型名の後ろに?を入れることで、nilをとることができるようになる。
var optional_value : String? // nilが入ってる。
var str : String = "sample"
optional_value = str // OK
str = optional_value // NG
Optional変数は、ベースになる型をラップしているイメージ。というかだからwrapping、って呼ばれてるんだ、っと気づいた。
ラッピングを解かないともとの型としては使えない。
ラッピングをとく。
var optional_value : String? // nilが入ってる。
optinal_value! // nilなら実行時エラー
if let val = optional_valu {
val // nilかどうかをチェックしてからvalに代入
}
何のためにあるのか
- nilが入っている可能性がある値を明示的にする。
- これにより、コンパイラのnil値アクセスのチェックが簡単になる。
- nilを返すことがある可能性のある関数の戻り値を使うときはOptional変数で受けてラッピングを解いてから使う。この作法により、プログラマもnilの存在を意識したコードに注意が行くようになる。