初心者、基礎を積み上げる「タプルと代入操作」
代入操作
タプルは同じ型を持つ変数に代入可能だが(前の記事参照)、さらに!一度の代入で各要素を別々の変数や定数に格納することが可能。
let attack = ("物理と魔法",30 ,70) let ( description, physics,magic) = attack print("\(description) \(physics) \(magic)") //物理と魔法 30 70
2行目はdescription, physics,magicという3つの新しい定数を定義して、値を代入している。このような代入だと、タプルの要素を別々な定数に一気に代入できる。
!さらに一部の値が不要な場合は「 _ 」 で使わないことを明記。
let (description, _, _) = attack
この時の「_」は要素の数を合わせるために使用しているため、ないとエラーとなる。
Xcodeのplaygroundなどで試すとGood
!タプルにはどんなインスタンスも含むことができるので、タプルの中にタプルを含むことができる。
let status = ("攻撃力",(50,60)) //(String)と(Int,Int)の2つの要素をもったタプル let (attack,(p,m)) = status //要素を格納 let (name, _) = status //(Int,Int)の値は使用しない場合
なお、この例で定数statusの50という値はstatus.1.0として参照できる。
タプルを使うと複数の値を同時に代入できる。これを利用するとSwap関数に相当する機能も容易に実現可能。
var a = 1, b = 0 (a,b) = (b,a) //aにbを、bにaを代入 print("a = \(a), b = \(b) ") // a=0,y=1と出力される
タプルを使ってフィボナッチ数列を計算するプログラム例
var x1 = 0, x2 = 1 print(" \(x1) ") for var i = 0; i < 50; i++ { ( x1, x2) = ( x2, x1+x2) print("\(x1)") }
ここまでのまとめ3つ
- 一度の代入で各要素を別々の変数や定数に格納することが可能。
- 一部の値が不要な場合は「 _ 」 で使わないことを明記。
- タプルの中にタプルを含むことができる。
参考書籍:
To Be Continue...
初心者、基礎を積み上げる「タプル」
タプルとは何か?
!タプルとは複数個のデータを組みにしてまとめたもの。関連し合う複数個の値をまとめて扱いたいが、専用の構造体やクラスを定義するほどでもない状況で活躍。特に、関数やプロパティから複数個の値を返すときに重宝する。
構造体などとは異なりタプルにはメソッドやプロパティを付け加えることはできない。一時的に保存する用途に使用するべきで、複雑なデータ構造を作るべきではない。
後半の難しい話は置いておいてまず重要なのは関数やプロパティから複数個の値を返すときに重宝ということ。
使用例
//体力
let HP : (String, Int) = ("ヒットポイント", 100)
なお、型名は省略可能。
let hp = ("ヒットポイント", 100)
タプルは二つと限定されているわけではないので多くの要素を持たせることも可能。
!タプルを型とする変数にタプルを代入するには、互いの要素の個数と型が同じでなければならない。
let hp = ("ヒットポイント", 100) let attack : (String, Int,Int) = ("物理と魔法", 30, 70) var status : (String, Int, Int) = attack //代入できる status = hp //エラー hpは(String,Int)で型が異なる
!タプルの要素には「.0」のような記法でアクセスできる。
print("\(status.0)は\(status.1)と\(status.2)") //物理と魔法は30と70 status.1 = 100 //statusは変数(var)なので代入可能 print("\(status.1)と\(status.2)") //100と70