【SwiftUI】タプル型変数の使い方

本記事では、SwiftUIで使用することのできるタプル型変数の使用方法について解説していきます。

タプル型とは

変数には一般的に数値が入るint型や文字列が入るString型の変数などがございますが、どちらも1つの変数に対して1つの値を入れるのが一般的です。

実際には複数の値を1まとまりのデータとして扱いたい場合などがあるかと思います。

そこでタプル型の変数を使用することで、一つの変数に対して複数の値を入れることができます。

また、タプル型では配列とは異なり、1 つのデータ型だけではなく複数のデータ型の値を格納することができます。

1つのタプル型の変数に対して、int型、String型、Double型のデータなど様々なデータを格納できることもタプル型変数の大きなメリットの一つです。

以降では実際のタプル型の宣言、参照方法などを具体例を交えて解説していきます。

変数について知りたい方はぜひ以下の記事も参考にしてみて下さい!

タプル型変数の宣言

タプル型変数の宣言には、先にデータ型と個数を宣言しておく方法と最初から初期値を入れておく2つの方法があります。

データ型と代入する個数を先に宣言しておく

変数に代入するデータ型と個数を最初に宣言し、宣言した内容に合わせて値を入れていく方法になります。

下の例では、profileという変数を宣言し、文字列型の値2つと数値型の値1つを代入するための変数であることを宣言しています。

その後、宣言通りの順番・個数の値を代入することができます。

var profile:(String, String, Int)
profile = ("田中","東京在住",170)

仮に個数の異なる値を代入したり、異なるデータ型の値を入れるときに順番を間違えてしまうとエラーとなってしまう点には注意しましょう。

//異なるデータ型の値を代入する順番が異なるので↓のようなエラーが出る
//Cannot assign value of type '(String, Int, String)' to type '(String, String, Int)'

var profile:(String, String, Int)
profile = ("田中",170,"東京在住")

//タプル型変数宣言と代入する値の個数が異なるのでエラーとなる
var profile:(String, String, Int)
profile = ("田中","東京在住",170,25)

初期値を代入する

最初から代入するデータの値が決まっている場合に便利な方法で、変数宣言と同時に値を代入してしまう方法です。

変数を宣言した段階で初期値を代入することで型推論が行われ、代入したデータに合わせてタプル型変数の個数、データ型が確定します。

//この時点で変数のデータ型が(String, String, Int)に確定する
var profile = ("田中","東京在住",170)

宣言後の変数には、同じデータ型であれば代入されているそれぞれの値を上書きすることもできます。

また、型推論が行われた場合には対象の場所に別のデータ型の値を代入することができない点には注意してください。

var profile = ("田中","東京在住",170)

//代入できる
profile = ("山田","沖縄在住",182)

//データ型が異なるので代入できない
profile = ("山田",182,"沖縄在住")

タプル型変数を参照する

ここからは宣言したり、値を代入したタプル型の変数からそれぞれの値を参照したり、使用する方法について解説していきます。

インデックス番号を指定して参照する

タプル型変数に入っている値の順番を指定して取得する方法です。

タプル型の変数の格納されている値は先頭から0番目、1番目、2番目、、と数えていきます。「タプル型変数名.インデックス番号」という形式で取得します。

profile = ("田中","東京在住",170)
print(profile.0)
print(profile.1)
print(profile.2)

実行結果

田中
東京在住
170

取り出してそれぞれの変数に代入する

タプル型の変数に入っているそれぞれの値は別の変数に移して個々で使用することも可能です。

個々の値を変数に代入する際には以下のように、タプル型変数に入っているデータの数と同じだけの変数を()で囲んで同時に宣言します。それぞれの変数には先頭から順番に値が代入されます。

var profile = ("田中","東京在住",170)
var (name, address, tall) = profile
print(name)
print(address)
print(tall)

実行結果

田中
東京在住
170

また、タプル型の変数内の一部の必要な値だけを取り出したい場合には、対象の部分だけ変数を設定して、その他の場所には「_」を設定して値を取得することも可能です。

例えば、タプル型変数のprofileから nameだけを取得したい場合には、以下のように変数を設定します。

以下のコードはname=”田中”といったように普通に変数に文字列型の値を代入することと同じ処理になります。

var profile = ("田中","東京在住",170)
var (name, _, _) = profile

ラベル付きタプル型変数

ラベル付きタプル型変数とは、タプル型変数の各値に名前がついているデータ型です。

それぞれの値にラベルという名前がついていることで、格納されている順番を意識することなく値を取得することができます。

また、ラベルをつけることで入っているデータが何を示しているのかをすぐに理解できるという点でも非常に扱いやすいデータ型です。

var profileInfo = (name:"田中", address:"東京在住", tall:170)
profileInfo.name
profileInfo.address
profileInfo.tall

実行結果

田中
東京在住
170

最後に

本記事では、便利なタプル型データについて使用方法など解説してきました。他にも、SwiftUIの色々な基礎知識を解説していますのでぜひそちらもご覧ください。