Swift Language
tupler
Sök…
Introduktion
En tupeltyp är en kommaseparerad lista över typer, inneslutna inom parentes.
Denna lista med typer kan också ha elementets namn och använda dessa namn för att hänvisa till värdena för de enskilda elementen.
Ett elementnamn består av en identifierare följt omedelbart av en kolon (:).
Allmänt bruk -
Vi kan använda en tupeltyp som returtyp för en funktion för att göra det möjligt för funktionen att returnera en enda tupel som innehåller flera värden
Anmärkningar
Tuples betraktas som värdetyper. Mer information om tuples hittades i dokumentationen: Developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html
Vad är tuples?
Tuples grupperar flera värden i ett enda sammansatt värde. Värdena i en tupel kan vara av valfri typ och behöver inte vara av samma typ som varandra.
Tuples skapas genom att gruppera någon mängd värden:
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
Även enskilda värden kan namnges när tupeln definieras:
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
De kan också namnges när de används som en variabel och har till och med förmågan att ha valfria värden inuti:
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
Sönderdelning i enskilda variabler
Tuples kan sönderdelas i individuella variabler med följande syntax:
let myTuple = (name: "Some Name", age: 26)
let (first, second) = myTuple
print(first) // "Some Name"
print(second) // 26
Denna syntax kan användas oavsett om tupeln har namngivna egenskaper:
let unnamedTuple = ("uno", "dos")
let (one, two) = unnamedTuple
print(one) // "uno"
print(two) // "dos"
Specifika egenskaper kan ignoreras med hjälp av understreck ( _
):
let longTuple = ("ichi", "ni", "san")
let (_, _, third) = longTuple
print(third) // "san"
Tuples som återvärdet av funktioner
Funktioner kan returnera tuples:
func tupleReturner() -> (Int, String) {
return (3, "Hello")
}
let myTuple = tupleReturner()
print(myTuple.0) // 3
print(myTuple.1) // "Hello"
Om du tilldelar parameternamn kan de användas från returvärdet:
func tupleReturner() -> (anInteger: Int, aString: String) {
return (3, "Hello")
}
let myTuple = tupleReturner()
print(myTuple.anInteger) // 3
print(myTuple.aString) // "Hello"
Använd en typealias för att namnge din tupeltyp
Ibland kanske du vill använda samma tupeltyp på flera platser i hela koden. Detta kan snabbt bli rörigt, särskilt om din tupel är komplex:
// 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)
}
Om du använder en viss tupeltyp på mer än ett ställe kan du använda typealias
nyckelordet för att namnge din tupeltyp.
// 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)
}
Om du tycker att du gör detta för ofta, bör du överväga att använda en struct
istället.
Byta värden
Tuples är användbara för att byta värden mellan 2 (eller fler) variabler utan att använda temporära variabler.
Exempel med 2 variabler
Får två variabler
var a = "Marty McFly"
var b = "Emmett Brown"
vi kan enkelt byta värden
(a, b) = (b, a)
Resultat:
print(a) // "Emmett Brown"
print(b) // "Marty McFly"
Exempel med 4 variabler
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
Tuples som fall i switch
Använd tuples i en switch
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
}
Eller i kombination med en Enum till exempel med storleksklasser:
let switchTuple = (UIUserInterfaceSizeClass.Compact, UIUserInterfaceSizeClass.Regular)
switch switchTuple {
case (.Regular, .Compact):
//statement
case (.Regular, .Regular):
//statement
case (.Compact, .Regular):
//statement
case (.Compact, .Compact):
//statement
}