Edited at

【Swift】タプル

More than 1 year has passed since last update.


実行環境


  • Swift4

  • Xcode9.2


タプルとは

順序付けされた値の集合体のこと。

異なる型の値をひとつの変数、または定数で扱えるようになる

ただし、値の追加、削除、また繰り返し処理などはできない。


メリット


  • 構造体やクラスを使わずに型の違う値の詰め合わせを簡単に作ることができる

  • 関数呼び出しの戻り値に複数の値を戻すコードが簡単に書くことができる


定義

var 変数名 = (値1, 値2, 値3, ・・・)

let 定数名 = (値1, 値2, 値3, ・・・)


使い方


宣言と値の取得


値のみの宣言の場合

// タプルの宣言

let tpl = (123, "ABC", true)

// 値の取得(インデックス番号)
print(tpl.0) // 結果: 123
print(tpl.1) // 結果: ABC
print(tpl.2) // 結果: true



型付き宣言の場合

// タプルの宣言

let tpl: (Int, String, Bool) = (123, "ABC", true)

// 値の取得(インデックス番号)
print(tpl.0) // 結果: 123
print(tpl.1) // 結果: ABC
print(tpl.2) // 結果: true



ラベル付き宣言の場合

// タプルの宣言

let tpl = (count: 123, alpha: "ABC", isFlag: true)

// 値の取得(ラベル指定)
print(tpl.count) // 結果: 123
print(tpl.alpha) // 結果: ABC
print(tpl.isFlag) // 結果: true

// 値の取得(インデックス番号)
print(tpl.0) // 結果: 123
print(tpl.1) // 結果: ABC
print(tpl.2) // 結果: true



型付き/ラベル付き宣言の場合

// タプルの宣言

let tpl: (count: Int, alpha: String, isFlag: Bool) = (count: 123, alpha: "ABC", isFlag: true)

// 値の取得(ラベル指定)
print(tpl.count) // 結果: 123
print(tpl.alpha) // 結果: ABC
print(tpl.isFlag) // 結果: true

// 値の取得(インデックス番号)
print(tpl.0) // 結果: 123
print(tpl.1) // 結果: ABC
print(tpl.2) // 結果: true



値の代入


タプルと変数の個数が同じ場合

// タプルの宣言

let (count, alpha, isFlag) = (123, "ABC", true)

// 値の取得
print(count) // 結果: 123
print(alpha) // 結果: ABC
print(isFlag) // 結果: true



タプルと変数の個数が違う場合(エラー発生)

// タプルの宣言

// コンパイルエラー発生
let (count, alpha) = (123, "ABC", true)


タプルと変数の個数が違う場合(エラー回避)

// タプルの宣言

// アンダースコアで数合わせすることにより、エラー回避
let (count, alpha, _) = (123, "ABC", true)

// 値の取得
print(count) // 結果: 123
print(alpha) // 結果: ABC



値の更新

// タプルの宣言

var tpl = (count: 123, alpha: "ABC", isFlag: true)

// 値の更新
tpl.count = 456
tpl.alpha = "DEF"
tpl.isFlag = false

// 値の取得(ラベル指定)
print(tpl.count) // 結果: 456
print(tpl.alpha) // 結果: DEF
print(tpl.isFlag) // 結果: false


値の入れ替え

var num1 = 1

var num2 = 2

// 値の入れ替え
(num1, num2) = (num2, num1)

// 値の取得
print(num1) // 結果: 2
print(num2) // 結果: 1


タプルは価渡しである

var tpl1 = (1, "ABC")

var tpl2 = tpl1

tpl1.0 = 10

print(tpl1) // 結果: (10, "ABC")
print(tpl2) // 結果: (1, "ABC")