【Swift】タプル

タプルとは複数の値を並べて順序をつけたもので、複数の値を 1 つのデータとして扱う事ができるものです。
構造体や class を作るほどではない時や、簡単に型が違う値を扱いたい時などに使います。
アクセスする時は配列同様インデックス番号を使うか、要素にラベルを付けることでラベルでアクセスすることもできます。

前回は 三項演算子 について書きました。

今回は タプル について書いていこうと思います。

タプルとは

タプルとは複数の値を並べて順序をつけたもので、複数の値を 1 つのデータとして扱う事ができるものです。
構造体 や class を作るほどではない時や、簡単に型が違う値を扱いたい時などに使います。
アクセスする時は 配列 同様インデックス番号を使うか、要素にラベルを付けることでラベルでアクセスすることもできます。

配列と違う点

タプル は 配列型 と似ていますが違いとして、配列は例外を除き代入する全ての要素は同じ型でなければならないのに対し、タプルはそれぞれ違う型の要素を複数入れておく事ができます。
タプルは要素を変更することはできますが、要素の追加削除はできません。

配列型 についてはこちらの記事で紹介しています。

タプルの書式

( ) の中に要素をカンマ , で区切って並べます。

(要素, 要素, 要素, ...)

初期値が決まってない場合(後で入れたい場合)は型名のみ宣言する

(型名, 型名, 型名, ...)

タプルの書き方

初期値が決まっている場合の例

//初期値が決まっている場合
var a = (1, 2, 3)

print(a) //(1, 2, 3)
print(type(of: a)) //(Int, Int, Int)

変数 a に タプルで Int型 の要素を 3 つ代入しています。

型名だけ宣言する場合の例

//型名だけ宣言
var b: (Int, String, Double)

変数 b にタプルで型名だけ 3 種類の要素を宣言しています。
この要素に値を入れていきます。

//型名だけ宣言
var b: (Int, String, Double)

//bに要素を代入
b = (1, "fuga", 1.23)

print(b) //(1, "fuga", 1.23)
print(type(of: b)) //(Int, String, Double)

これでタプルの特徴である、型が違う要素を複数代入することが出来ました。

※ 後から要素を代入するときは、宣言した時の型名の順番と同じ順番の型で要素を入れないとエラーになります。

次は要素の変更をしてみます。

//型名だけ宣言
var b: (Int, String, Double)

//bに要素を代入
b = (1, "fuga", 1.23)

print(b) //(1, "fuga", 1.23)
print(type(of: b)) //(Int, String, Double)

//bの要素を変更してみる
b = (2, "hoge", 4.56)

print(b) //(2, "hoge", 4.56)

これでタプルの要素が変更されました。

※ 要素の変更は可能ですが要素の追加削除はできません。

アクセス

インデックス番号でアクセスする

アクセス方法は 、
変数、定数名 . インデックス番号
でアクセスします。

//型名だけ宣言
var b: (Int, String, Double)

//bに要素を代入
b = (1, "fuga", 1.23)

print(b) //(1, "fuga", 1.23)
print(type(of: b)) //(Int, String, Double)

//bの要素を変更してみる
b = (2, "hoge", 4.56)

print(b) //(2, "hoge", 4.56)

//インデックス番号でアクセスする
print(b.0) //2
print(b.1) //hoge
print(b.2) //4.56

インデックス番号 についてはこちらの記事で紹介しています。

tupleコードimg

タプルの要素にラベルを付ける

ラベルを付けるときの書式

(ラベル名: 要素, ラベル名: 要素, ラベル名: 要素, ...)

( ) の中に、ラベル名を書いた後コロン : を書いて要素を代入します。

//タプルの要素にラベルを付ける
var c = (level: 5,
         name: "ゲレゲレ",
         attack: 100)

ラベルでアクセスする

ラベルでアクセスする時は、
変数・定数名 . ラベル名
でアクセスします。

//タプルの要素にラベルを付ける
var c = (level: 5,
         name: "ゲレゲレ",
         attack: 100)

//ラベルでアクセス
print(c.level) //5
print(c.name) //ゲレゲレ
print(c.attack) //100

ラベル名でアクセスできました。
また、ラベルを付けたタプルでも
インデックス番号でアクセスできます。

//タプルの要素にラベルを付ける
var c = (level: 5,
         name: "ゲレゲレ",
         attack: 100)

//ラベルでアクセス
print(c.level) //5
print(c.name) //ゲレゲレ
print(c.attack) //100

//インデックス番号でアクセスする
print(c.0) //5
print(c.1) //ゲレゲレ
print(c.2) //100
tupleコードimg2

型名だけ宣言して後で要素を入れたい場合も、同様にラベルを付けることができます。
以上 タプル についてでした。

次回は Optional型 について書いていこうと思います。

実行環境

version
Xcode 14.2 (14C18)
Swift 5.2.4

公式ドキュメント

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/