Swift の Optional のメモ
Swift の Optional についてのメモ。 型の後ろにつく「?」や「!」がわからなかったので調べつつ動作確認をしたのでメモ。
[Swift] Optional型についてのまとめ
http://qiita.com/edo_m18/items/ca8c9c21049c280d3328
[Swift] 「!」、「?」マーク(Optional)についてのメモ
http://qiita.com/cotrpepe/items/e30c7442733b93adf46a
のあたりを読みつつ動作確認。以下はその結果。
// var prop: Optinal<String> と同義. optional でラップされる // ? はnilの可能性を含む. var prop: String? // var prop2: ImplicitlyUnwrappedOptional<String> と同義 // ! は ? でラップされた状態をアンラップする var prop2: String! // 確認1: ?, ! を利用した場合の 初期値 nilセット var hoge:String? = nil // OK nil は OK var hoge1:String! = nil // OK これはなぜ?初期値に nil がセットできるのは問題では? //var hoge2:String = nil // NG nil は NG var hoge2:String = "hoge" // OK nil 以外なら OK // 確認2 ?, ! で宣言した変数に対するメソッド実行(と、実行時に ?,! を指定した場合) // ?の場合 // エラー。Optinal<String>の記法の通り wrap されているので、直接 String のメソッドは利用できない。静的解析のタイミングでエラー var value1 = hoge.toInt() // OK。 hogeがnilかチェックをしてくれる。hogeがnilの場合は toInt は実行しないので実行時エラーにはならない。 nil 出ない場合に実行される var value2 = hoge?.toInt() // 実行時エラー。 ! で String としてアンラップしており、コンパイルは通るが、実際には nil なので実行時エラーになる var value3 = hoge!.toInt() // !の場合 // 実行時エラー。 コンパイルは通るが、実際には nil なので実行時エラーになる var value4 = hoge1.toInt() // OK。 hogeがnilかチェックをしてくれる。hogeがnilの場合は toInt は実行しないので実行時エラーにはならない。 nil 出ない場合に実行される var value5 = hoge1?.toInt() // 実行時エラー。 ! で String としてアンラップしており、コンパイルは通るが、実際には nil なので実行時エラーになる var value6 = hoge1!.toInt() // ?も!もなし // OK。 var value7 = hoge2.toInt() // エラー。 hoge1 は optionalType ではないので ? は使えない. 静的解析のタイミングでエラー var value8 = hoge2?.toInt() // エラー。 hoge1 は optionalType ではないので ? は使えない. 静的解析のタイミングでエラー var value9 = hoge2!.toInt()