読者です 読者をやめる 読者になる 読者になる

そーす

福岡在住のプログラマ

Tupleの使い方まとめ

f:id:saburesan:20160427075732p:plain

名前無し

let tpl1 = ("unko", 32)
print("\(tpl1.0), \(tpl1.1)") // unko, 32

代入時でキー指定

let tpl2 = (name: "unko", size: 32)
print("\(tpl2.name), \(tpl2.size)") // unko, 32
print("\(tpl2.0), \(tpl2.1)") // unko, 32

キーをつけたり付けなかったり

let tpl3 = ("unko", size: 32)
print("\(tpl3.0), \(tpl3.size)") // unko, 32

変数宣言時にキー指定

let (name, size) = ("unko", 32)
print("\(name), \(size)") // unko, 32

あとからキー指定

let tpl4 = ("unko", 32)
let (name, size) = tpl4
print("\(name), \(size)") // unko, 32
  print("\(tpl4.name), \(tpl4.size)") // もちろんコレはエラーです

キーが指定されていれば順不同でも大丈夫

let tpl:(age:String, size:String) = (size: "size", age: "age")
print("age: \(tpl.age), size: \(tpl.size)") // age: age, size: size

上記と似てるしコンパイル通るけどダメな奴

let (age, size) = (size: "size", age: "age")
print("age: \(age), size: \(size)") // age: size, size: age

もちろんクロージャもいけるよ

let (f1, f2) = ({ print("f1") }, { print("f2") })
f1() // f1
f2() // f2

クロージャもいけるから関数もいけるよ

func hoge(){ print("hoge") }
func fuga(){ print("fuga") }

let (f3, f4) = (hoge, fuga)
f3() // hoge
f4() // fuga

let funcs = (hoge, fuga)
funcs.0() //hoge
funcs.1() // fuga

このスタンプじわる

f:id:saburesan:20160715102245p:plain