iOS 新言語 Swift を触ってみた(3) Optional編
どうも、fugetuです。
このシリーズも3回目ですが、まだSwiftに慣れていない今日この頃です。
さて今回は他の言語では見られないSwift独特の考え方、「Optional」について紹介したいと思います。
■Optionalとは
Optionalは「変数に空の状態(=nilを代入)を代入できるようにする」ためのものです。
(nil とは Java でいう null みたいなものです。)
Swiftはコンパイル時点でオブジェクトが空であることをチェックするために、
デフォルトではnilを代入できないようにしています。
nilを代入できるようにするためには、Optionalを使って明示的に変数を宣言する必要があります。
■Optional宣言方法
では実際にnil代入エラーが発生するか試してみます。
var str:String = "fugetu"; // 文字列 "fugetu" を宣言 str = nil; // nil を宣言
こんな宣言をしたら以下のようなコンパイルエラーで怒られます。
では実際に nil を代入するにはどうすれば良いかというと、変数型宣言の後に"?"を追加すればOKです。
var str:String? = "fugetu"; // 文字列 "fugetu" を宣言 str = nil; // nil を宣言
これでコンパイルエラーは無くなります。
■Optionalの型
Optionalで宣言した場合に変数の型はどのようになっているのでしょうか。
実際に値を出力してみると
var str:String? = "fugetu"; // 文字列 "fugetu" を宣言 println(str); // 変数 str を出力
このように”?”を付けて宣言した変数はOptional型として、直接値が触れないようになっております。
Optional型は以下のように宣言することもできます。
var str:Optional<String> = "fugetu"; // Optional型 文字列 "fugetu" を宣言
このOptional型で変数を宣言して値が直接触れない状態をラップwrapされているといいます。
■wrap、unwrap
Optional型で宣言された変数はそのまま使用した場合には、wrapされている状態なので直接値を取り出すことはできません。変数の後に"!"をつけることで値を取り出すアンラップunwrapをすることができます。
var str:String? = "fugetu"; // 文字列 "fugetu" を宣言 println(str); // ラップwrapされたまま変数 str を出力 println(str!); // アンラップunwrapして変数 str を出力
とOptionalの紹介は以上になります。
Javaを使用しているfugetuとしては空の状態をデフォルトで代入できないのは、とても抵抗があります。
Optionalは宣言やアンラップに別の方法がありますが今回は割愛します。
次回は関数関連について紹介したいと思います。
では、また