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 を宣言

 

こんな宣言をしたら以下のようなコンパイルエラーで怒られます。

スクリーンショット 2014-11-28 10.28.07

 

では実際に nil を代入するにはどうすれば良いかというと、変数型宣言の後に"?"を追加すればOKです。

var str:String? = "fugetu";  // 文字列 "fugetu" を宣言
str = nil;                   // nil を宣言

 

これでコンパイルエラーは無くなります。

 


 

Optionalの型

 

Optionalで宣言した場合に変数の型はどのようになっているのでしょうか。
実際に値を出力してみると

 

var str:String? = "fugetu";  // 文字列 "fugetu" を宣言
println(str);                // 変数 str を出力

 

スクリーンショット 2014-11-28 11.21.32

 

このように”?”を付けて宣言した変数は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 を出力

 

スクリーンショット 2014-11-28 11.22.08

 

 

とOptionalの紹介は以上になります。
Javaを使用しているfugetuとしては空の状態をデフォルトで代入できないのは、とても抵抗があります。

Optionalは宣言やアンラップに別の方法がありますが今回は割愛します。

次回は関数関連について紹介したいと思います。
では、また