オプショナル変数の特徴や使い方を紹介した記事です。
環境(以下の環境で動作確認をしています)
- OSX Yosemite
- Xcode6.1
変数の種類
Swiftで扱える変数の種類はいくつかありますが、通常のデータ型を決めて変数を宣言する方法を確認していきます。
例)
1 2 3 |
[swift] var price:Int [/swift] |
・特徴として、nil(何もない)を代入することができません
次にオプショナル変数を宣言する方法です。
例)
1 2 3 |
[swift] var price:Int? [/swift] |
・変数の宣言時に、データ型の後ろに「?」をつけるとオプショナル変数となります。
・特徴として、変数の型がもつ通常の値に加えて、nil(何もない)を代入することが可能です。
オプショナル変数の使用方法
オプショナル変数に代入した値を使用する際には、変数名の後ろに「!」をつけて使用します。これをアンラップと呼びます。
例)
1 2 3 4 |
[swift] var price:Int? = 100 println(price! * 1.08) [/swift] |
・中身が何もない(nil)の場合、実行時エラーが発生するので注意が必要です。
例)
1 2 3 4 |
[swift] var price:Int? = nil println(price! * 1.08) //例外発生 [/swift] |
オプショナルバインディング
・「値がnilではないという判定と、アンラップして別変数への代入を同時に行うこと」ができます。これを、オプショナルバインディングと呼び、オプショナル変数を扱う際に、実行時例外を起こすことなく安全に使用することができます。
例)
1 2 3 4 5 6 7 8 9 10 |
[swift] var price:Int? = 100 if var unwrapped= price { //priceがnilでない時に、実行される println(unwrapped * 1.08) }else{ //priceがnilの時に、実行される println(“数値を入力して下さい”) } [/swift] |
オプショナル変数を使用する基準
・いつ使用するべきなのか、慣れるまで判断し難い所がありますが、ポイントとして、Swiftで予め用意されている、クラスのメソッドを使用する際に、戻り値のデータ型に「?」が付いている場合はオプショナル変数を使用してください。
たとえば、ユーザーが画面に入力した値を計算の値として利用したい場合下記のようなプログラムとなります。
例)
1 2 3 4 5 6 7 8 9 10 |
[swift] var str:String = [画面に入力された値] var num:Int? = str.toInt()//toInt()メソッドは文字列を数値型に変換する、また戻り値はInt?型 //オプショナルバインディングでチェック if var unwrapped= num { println(unwrapped * 1.08) }else{ println(“数値を入力して下さい”) } [/swift] |
・toInt()メソッドは数値型に変換できなかった場合にnilを戻します。ユーザーが間違って数値に変換できない値を入力した時は、nilが戻るため、nilを代入できるオプショナル変数を使う必要があります。
オプショナル変数を使用する際は、予期せぬエラーが出ることを防ぐ為にも、適切にオプショナルバインディングを使用してプログラムを組み立てて下さい。今回は基本的な扱いを紹介しましたが、より実践的な使用方法に関しては、iPhone講座の内容で説明しています。