Swift Language
タプル
サーチ…
前書き
タプル型は、コンマで区切られた型のリストで、括弧で囲まれています。
このタイプのリストには、エレメントの名前を付けることもでき、それらの名前を使用して個々のエレメントの値を参照することもできます。
要素名は、識別子の直後にコロン(:)が続きます。
一般的な使用 -
関数の戻り値の型としてタプル型を使用すると、関数が複数の値を含む単一のタプルを返すことができます
備考
タプルは値型と見なされます。タプルの詳細については、 developer.apple.com/ library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.htmlのドキュメントを参照してください。
タプルとは何ですか?
タプルは、複数の値を単一の複合値にグループ化します。タプル内の値は、任意の型である可能性があり、互いに同じ型である必要はありません。
タプルは、任意の量の値をグループ化することによって作成されます。
let tuple = ("one", 2, "three")
// Values are read using index numbers starting at zero
print(tuple.0) // one
print(tuple.1) // 2
print(tuple.2) // three
タプルが定義されている場合は、個々の値にも名前を付けることができます。
let namedTuple = (first: 1, middle: "dos", last: 3)
// Values can be read with the named property
print(namedTuple.first) // 1
print(namedTuple.middle) // dos
// And still with the index number
print(namedTuple.2) // 3
変数として使用するときに名前を付けることもできますし、オプションの値を内部に持つこともできます:
var numbers: (optionalFirst: Int?, middle: String, last: Int)?
//Later On
numbers = (nil, "dos", 3)
print(numbers.optionalFirst)// nil
print(numbers.middle)//"dos"
print(numbers.last)//3
個々の変数に分解する
タプルは、以下の構文で個々の変数に分解できます。
let myTuple = (name: "Some Name", age: 26)
let (first, second) = myTuple
print(first) // "Some Name"
print(second) // 26
この構文は、タプルに名前のないプロパティがあるかどうかに関係なく使用できます。
let unnamedTuple = ("uno", "dos")
let (one, two) = unnamedTuple
print(one) // "uno"
print(two) // "dos"
アンダースコア( _
)を使用すると、特定のプロパティを無視できます。
let longTuple = ("ichi", "ni", "san")
let (_, _, third) = longTuple
print(third) // "san"
関数の戻り値としてのタプル
関数はタプルを返すことができます:
func tupleReturner() -> (Int, String) {
return (3, "Hello")
}
let myTuple = tupleReturner()
print(myTuple.0) // 3
print(myTuple.1) // "Hello"
パラメータ名を代入すると、戻り値から使用できます。
func tupleReturner() -> (anInteger: Int, aString: String) {
return (3, "Hello")
}
let myTuple = tupleReturner()
print(myTuple.anInteger) // 3
print(myTuple.aString) // "Hello"
タプルの名前をタイル型で指定する
時には、コード全体の複数の場所で同じタプルタイプを使用することができます。これは、あなたのタプルが複雑な場合は特に、面倒です。
// Define a circle tuple by its center point and radius
let unitCircle: (center: (x: CGFloat, y: CGFloat), radius: CGFloat) = ((0.0, 0.0), 1.0)
func doubleRadius(ofCircle circle: (center: (x: CGFloat, y: CGFloat), radius: CGFloat)) -> (center: (x: CGFloat, y: CGFloat), radius: CGFloat) {
return (circle.center, circle.radius * 2.0)
}
複数の場所で特定のタプル型を使用する場合は、 typealias
キーワードを使用してタプル型の名前をtypealias
ことができます。
// Define a circle tuple by its center point and radius
typealias Circle = (center: (x: CGFloat, y: CGFloat), radius: CGFloat)
let unitCircle: Circle = ((0.0, 0.0), 1)
func doubleRadius(ofCircle circle: Circle) -> Circle {
// Aliased tuples also have access to value labels in the original tuple type.
return (circle.center, circle.radius * 2.0)
}
しかし、これをあまりにも頻繁にやっている場合は、代わりにstruct
使用を検討する必要があります。
値の入れ替え
タプルは、一時変数を使用せずに2つ(またはそれ以上)の変数間で値を入れ替えるのに便利です。
2つの変数を持つ例
2つの変数
var a = "Marty McFly"
var b = "Emmett Brown"
私たちは値を簡単に交換することができます
(a, b) = (b, a)
結果:
print(a) // "Emmett Brown"
print(b) // "Marty McFly"
4つの変数を持つ例
var a = 0
var b = 1
var c = 2
var d = 3
(a, b, c, d) = (d, c, b, a)
print(a, b, c, d) // 3, 2, 1, 0
スイッチのケースとしてのタプル
スイッチにタプルを使用する
let switchTuple = (firstCase: true, secondCase: false)
switch switchTuple {
case (true, false):
// do something
case (true, true):
// do something
case (false, true):
// do something
case (false, false):
// do something
}
または列挙型と組み合わせてサイズクラスの例:
let switchTuple = (UIUserInterfaceSizeClass.Compact, UIUserInterfaceSizeClass.Regular)
switch switchTuple {
case (.Regular, .Compact):
//statement
case (.Regular, .Regular):
//statement
case (.Compact, .Regular):
//statement
case (.Compact, .Compact):
//statement
}