Swift
swift4

【Swift】タプル

実行環境

  • 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")