タプルは、複数の値を 1 つの複合値にグループ化します。タプル内の値はどのような型でも構わず、それぞれが同じ型である必要もありません。

この例では、(404, "Not Found") は HTTP ステータスコードを表すタプルです。HTTP ステータスコードは、Web ページをリクエストしたときに Web サーバから返される特別な値です。404 Not Found のステータスコードは、存在しない Web ページをリクエストした場合に返されます。

let http404Error = (404, "Not Found")
// http404Error は、型が (Int, String) で、(404, "Not Found") に等しい

タプル (404, "Not Found") は、Int と String を一緒にグループ化し、HTTP ステータスコードを数値と人間が読み取れる説明の 2 つの値に分けています。これを「(Int, String) 型のタプル」と表現できます。

型の順序を問わずタプルを生成でき、好きなだけ異なる型を含めることができます。(Int, Int, Int)や、(String, Bool) 型のタプルでも、問題ありません。

タプルの中身を別々の定数や変数に分解し、普通にアクセスすることができます。

let (statusCode, statusMessage) = http404Error
print("The status code is \(statusCode)")
// "The status code is 404" と出力
print("The status message is \(statusMessage)")
// "The status message is Not Found" と出力

タプルの値のうち、いくつかだけが必要な場合には、タプルを分解する際に不要な部分をアンダースコア (_) にします。

let (justTheStatusCode, _) = http404Error
print("The status code is \(justTheStatusCode)")
// "The status code is 404" と出力

あるいは、ゼロで始まるインデックス値でタプル内の個々の値にアクセスします。

print("The status code is \(http404Error.0)")
// "The status code is 404" と出力
print("The status message is \(http404Error.1)")
// "The status message is Not Found" と出力

タプルが定義される時に、タプル内の個々の要素に名前を付けることができます。

let http200Status = (statusCode: 200, description: "OK")

タプル内の要素に名前を付けた場合、その名前で要素の値にアクセスすることができます。

print("The status code is \(http200Status.statusCode)")
// "The status code is 200" と出力
print("The status message is \(http200Status.description)")
// "The status message is OK" と出力

タプルは、関数の戻り値として特に効果的です。Web ページを取得する関数が、ページ取得の成否を表現するために (Int, String) のタプル型を返します。型が 1 つだけの値を返す関数と比べて、型が異なる 2 つの値をタプルで返す関数のほうが、より役立つ情報を返すことができます。詳しい情報は、Functions with Multiple Return Values を確認してください。

NOTE
タプルは、関連する値を一時的にグループ化するのに効果的です。複雑なデータ構造には適していません。データ構造が一時的なものでない場合、タプルとするよりも、クラスまたは構造体としてモデル化します。詳しい情報は、Classes and Structures を確認してください。

Portions of this page are translations based on work created and shared by Apple and used according to terms described in the Creative Commons Attribution 4.0 International License.