オプショナルは、空の状態を持てる変数だ。空はnilで表せる。
変数宣言の型の後に?を付ける

var hoge:Int?
hoge = nil

var hoge2:Int
hoge2 = nil       // エラーになる。

オプショナルをそのまま使うとエラーになる。nilかどうかチェックしてnilでなければ変数に!をつけて値にアクセスできる。

var hogeOpt:Int? = 10

if hogeOpt != nil {
    println(hogeOpt!)     // 10が表示される
}

またこう言うふうにも書ける。オプショナルバインディングって言う。

var hogeOpt:Int? = 10

if let hoge = hogeOpt {
    println(hoge)     // 10が表示される
}

また、複数のオプショナルで上記のような処理を行うには、,で複数個指定する。

var hogeOpt1:Int? = 10
var hogeOpt2:Int? = 20

if let hoge1 = hogeOpt1, let hoge2 = hogeOpt2 {
    println("hoge1=\(hoge1), hoge2=\(hoge2)")   // "hoge1=10, hoge2=20"と表示
}

hogeOpt1、hogeOpt2どちらかがnilなら、falseになり表示されない。


このエントリーをはてなブックマークに追加 Clip to Evernote ブログランキング・にほんブログ村へ
にほんブログ村

複数の値をひとまとめにする機能だ。

let hoge = ("あ", 1)

println(hoge.0)    // "あ"と表示
println(hoge.1)    // "1"と表示

hoge.0、hoge.1でそれぞれの値を参照できる。
hogeは型推論を使っているが、あえて書くと次のようになる。

let hoge:(String, Int) = ("あ", 1)

タプルをバラバラに変数に代入する。

let hoge = ("あ", 1)
let (v1, v2) = hoge
let (v3, _) = hoge   // 1の方が必要なければ"_"(ワイルドカード)を指定しておく

println(v1)    // "あ"と表示
println(v2)    // "1"と表示
println(v3)    // "あ"と表示

hoge.0やhoge.1じゃなく名前で参照することもできる。

let hoge = (str:"あ", num:1)

println(hoge.str)    // "あ"と表示
println(hoge.num)    // "1"と表示

このエントリーをはてなブックマークに追加 Clip to Evernote ブログランキング・にほんブログ村へ
にほんブログ村

C言語のtypedefみたいなもんだ。
型に別名を与えることができる。

typealias hoge = Int
var a:hoge = 10

このエントリーをはてなブックマークに追加 Clip to Evernote ブログランキング・にほんブログ村へ
にほんブログ村

↑このページのトップヘ