##Tuple(タプル)とは
型の異なる複数の値をひとまとめにできる。(ざっくり)
Tupleのリテラル
// 値のみ
(val1, val2, ...)
// 値に名前をつけられる
(name1: val1, name2: val2, ...)
##Tupleをつかう
####値のみで宣言
- 0からの連番で参照する
値のみのTuple
var tpl = ("Qiita", 10, true)
println(tpl) // -> (Qiita, 10, true)
println(tpl.0) // -> Qiita
println(tpl.1) // -> 10
println(tpl.2) // -> true
println(tpl.3) // Error
tpl.1 = 20
println(tpl.1) // -> 20
####値に名前をつけて宣言
- つけた名前で参照できる
- 連番でも参照できる
値に名前をつけたTuple
var tpl = (name: "Qiita", count: 10, flag: true)
println(tpl.name) // -> Qiita
println(tpl.count) // -> 10
println(tpl.flag) // -> true
println(tpl.0) // -> Qiita
println(tpl.1) // -> 10
println(tpl.2) // -> true
####Tupleに変数名をつけない
- まとめて変数宣言っぽいことができる
Tupleに変数名をつけない
var (name, count, flag) = ("Qiita", 10, true)
println(name) // -> Qiita
println(count) // -> 10
println(flag) // -> true
####Tupleから指定した値のみ取り出す
- 取得しない位置に_(アンダースコア)を入れる
Tupleから指定した値のみ取り出す
var (name, _, flag) = ("Qiita", 10, true)
println(name) // -> Qiita
println(_) // Error
println(flag) // -> true
####Tupleで値を入れ替える
- tmpてきな変数を用意する必要がない
Tupleで値を入れ替える
var n1 = 1
var n2 = 2
(n1, n2) = (n2, n1)
println(n1) // -> 2
println(n2) // -> 1
####ネストしたTuple
- 右辺と左辺のネスト構造が同じなら代入される
ネストしたTuple
var nest = (10, 20, (30, 40))
var (n1, n2, n3, n4) = nest // Error
var (n1, n2, (n3, n4)) = nest // 代入される
####無駄なネスト
- 無駄なネストは無視される?
無駄なネスト
var nest = (((((1)))), 2)
println(nest.0) // -> 1
println(nest.1) // -> 2
var (num1, num2) = nest // 代入される
間違えそうな例
// ネストの構造がおかしいのでnest.num1を参照するとErrorになる
var nest = (((((num1: 1)))), num2: 2)
// 通る
var nest = (num1: ((((1)))), num2: 2)
println(nest.num1) // -> 1
println(nest.num2) // -> 2
##ArrayやDictionaryとの違い
- 型の異なる値を入れられる
- 繰り返し処理ができない
- 値の追加/削除ができない
とか。
##実はTupleはSwiftの基本となる値
すべての値は「値が1つだけのTuple」らしい。
この2行は同じ意味
var txt = "てきすと"
var (txt) = ("てきすと")
なので 変数名.0 でアクセスできる。
変数名.0
var txt = "てきすと"
println(txt.0) // -> てきすと
txt.0 = "テキスト"
println(txt) // -> テキスト
これ リテラル.0 もいけた。
リテラル.0
println("text".0) // -> text
println((0).0) // -> 0
println(true.0) // -> true
そしてこれ
0の連鎖
var txt = "てきすと"
println(txt) // -> てきすと
println(txt.0) // -> てきすと
println(txt.0.0) // -> てきすと
println(txt.0.0.0) // -> てきすと
txt.0.0.0.0 = "テキスト"
println(txt) // -> テキスト
こえーよー
Swiftこえーよー
##参考
Swiftスタートアップガイド