Buscar..


Introducción

Un tipo de tupla es una lista de tipos separados por comas, entre paréntesis.

Esta lista de tipos también puede tener el nombre de los elementos y usar esos nombres para referirse a los valores de los elementos individuales.

Un nombre de elemento consiste en un identificador seguido inmediatamente por dos puntos (:).

Uso común -

Podemos usar un tipo de tupla como el tipo de retorno de una función para permitir que la función devuelva una tupla única que contenga múltiples valores

Observaciones

Las tuplas se consideran tipos de valor. Se puede encontrar más información sobre las tuplas en la documentación: developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html

¿Qué son las tuplas?

Las tuplas agrupan múltiples valores en un solo valor compuesto. Los valores dentro de una tupla pueden ser de cualquier tipo y no tienen que ser del mismo tipo entre sí.

Las tuplas se crean agrupando cualquier cantidad de valores:

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

También se pueden nombrar valores individuales cuando se define la tupla:

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

También pueden ser nombrados cuando se usan como una variable e incluso tienen la capacidad de tener valores opcionales dentro de:

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

La descomposición en variables individuales.

Las tuplas se pueden descomponer en variables individuales con la siguiente sintaxis:

let myTuple = (name: "Some Name", age: 26)
let (first, second) = myTuple

print(first) // "Some Name"
print(second)  // 26

Esta sintaxis se puede usar independientemente de si la tupla tiene propiedades sin nombre:

let unnamedTuple = ("uno", "dos")
let (one, two) = unnamedTuple
print(one) // "uno"
print(two) // "dos"

Las propiedades específicas se pueden ignorar usando el guión bajo ( _ ):

let longTuple = ("ichi", "ni", "san")
let (_, _, third) = longTuple
print(third) // "san"

Tuplas como el valor de retorno de las funciones

Las funciones pueden devolver tuplas:

func tupleReturner() -> (Int, String) {
    return (3, "Hello")
}

let myTuple = tupleReturner()
print(myTuple.0) // 3
print(myTuple.1) // "Hello"

Si asigna nombres de parámetros, pueden usarse desde el valor de retorno:

func tupleReturner() -> (anInteger: Int, aString: String) {
    return (3, "Hello")
}

let myTuple = tupleReturner()
print(myTuple.anInteger) // 3
print(myTuple.aString) // "Hello"

Usando una tipografía para nombrar tu tipo de tupla

En ocasiones, es posible que desee utilizar el mismo tipo de tupla en varios lugares a lo largo de su código. Esto puede ensuciarse rápidamente, especialmente si tu tupla es compleja:

// 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)
}

Si usa un determinado tipo de tupla en más de un lugar, puede usar la palabra clave typealias para nombrar su tipo de tupla.

// 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)
}

Sin embargo, si te encuentras haciendo esto con demasiada frecuencia, debes considerar usar una struct lugar.

Intercambiando valores

Las tuplas son útiles para intercambiar valores entre 2 (o más) variables sin usar variables temporales.

Ejemplo con 2 variables

Dadas 2 variables

var a = "Marty McFly"
var b = "Emmett Brown"

Podemos intercambiar fácilmente los valores.

(a, b) = (b, a)

Resultado:

print(a) // "Emmett Brown" 
print(b) // "Marty McFly"

Ejemplo con 4 variables

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

Tuplas como caso en el interruptor

Usa tuplas en un interruptor

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
}

O en combinación con un Enum Por ejemplo con clases de tamaño:

    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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow