Swift 2.1 Optional型について
Swift 2.1 の Optional型について Apple のドキュメントを読んだので、まとめます。
Optional型って?
Optional型 は String? や Int? のように表し、型の直後に ? を付けます。
簡単にまとめると、その変数や定数に本当に値が入っていますか?実は値は入ってないんじゃないですか?とプログラマに認識させる型です。
例えば、テキストフィールドの値をラベルに表示するとします。もしテキストフィールドに値が何も入っていなければ、ラベルは何を表示すればいいのか分かりません。その結果エラーが発生して、アプリが落ちてしまうのです。
Label_Result.text = TextField_Input.text!
// TextField_Inputになにも値が入っていないとクラッシュ!
どうして落ちるの?
先ほどの例でいうと、nil という特殊な値が Label_Result.text に代入されてしまっているのです。
// Label_Result.text = TextField_Input.text!
// TextField_Inputになにも値が入っていないとnilが代入される
Label_Result.text = nil
nil は Optional型の変数や定数にしか代入できないので、アプリが落ちてしまうのです。
let num: Int = 20
num = nil // コンパイルエラー
Optional型を使う
Optional型の変数や定数を使うには以下の方法を使います
nilじゃないよ!と指定する
Optional型の変数や定数の直後に ! をつけることで Optional型ではなくなります。これは「アンラップ」と呼びます。この値は確かに存在するんだ!と自分で指定する方法です。
// Label_Result.text = TextField_Input.text! // アンラップ
nil かチェックする
上の例で示したように、アンラップではエラーを起こす可能性があります。そこで、nil かどうかチェックするようにしましょう。if文を使います。
if TextField_Input.text != nil {
Label_Result.text = TextField_Input.text
} else {
// テキストフィールドに値がなかった時の処理
}
nil かチェックすると同時に変数や定数を定義することができます。
if let input = TextField_Input.text {
Label_Result.text = input
} else {
// テキストフィールドに値がなかった時の処理
// input に nil が代入されてしまう時の処理
}
まとめ
Opational型の変数や定数を使うときは、
- 値が確実に入ることが分かっていればアンラップする
- if 文でチェックする
上記2点を心がけましょう。