kitoko552.memo

kitoko552のメモ

Swiftのタプルの基本

Swiftにはタプル(tuple)を使って、複数個のデータを組みにしてまとめて扱うことができます。 関連するデータの組を扱いたいけど、構造体にするほどでもないというときに使えます。 また、関数やメソッドの返り値をタプルにすることで、複数の値を返すことが可能になります。

タプルは以下のように定義します。

var t: (String, String) = ("iPhone", "Apple")
// または
var t = ("iPhone", "Apple")

以下のようにして参照します。

println(t.0) // iPhone
t.1 = "Grape"
println(t.1) // Grape

代入できます。

let phone: (String, String) = t // 同じタプルとして代入。
let (name, maker) = t // nameとmakerという定数を新しく定義している。
println(name) // iPhone

let (n, _) = t // iPhoneだけがnに代入されます。

キーワード付きのタプル

タプルにはキーワードを付けることができます。

var t: (name: String, maker: String, price: Int) = ("iPhone", "Apple", 50000)
// または
var t = (name: "iPhone", maker: "Apple", price: 50000)

以下のようにして参照します。

println(t.name) // iPhone
t.price = 10
println(t.price) // 10

キーワードがないタプルと同じキーワードのタプルには代入できますが、キーワードが異なるタプルには代入できません。

var v1: (String, String, Int) = t
var v2: (name: String, maker: String, price: Int) = t
var v3: (hoge: String, hage: String, fuga: Int) = t // コンパイルエラー

要素の順序が違っていても、同じキーワード同士が代入されます。

var v4: (maker: String, price: Int, name: String) = t
println(v4) // (Apple, 50000, iPhone)

タプルをswitch文で使う

タプルはswitch文で使うことができます。

switch day {
case (1, 1):
    println("元旦")
case (2, 14):
    println("バレンタイン")
default:
    break
}

caseラベル内にletをつけて(varでも可)、case節だけで有効な定数、変数を定義できます。

switch day {
...
case (8, let d):
    println("8月\(d)日は暑いね。")
default:
    break
}

定数、変数を使わずに、片方の値だけで条件分岐したい場合は_を使います。

switch day {
...
case (8, _):
    println("8月は暑いね。")
default:
    break
}

letをタプルの外に書くことで、タプルの全ての要素を定数にすることができます。

switch day {
...
case let (month, day):
    println("\(month)\(day)日ですね。")
default:
    break
}

where節を使うことで要素に条件をつけることもできます。

switch day {
...
case let (month, day) where day > 25:
    println("\(month)月も終わりですね。")
default:
    break
}

※この記事では以下の本を参考にしています。

詳解 Swift

詳解 Swift