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
    }


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow