Tuplas

Las tuplas agrupan datos en un mismo objeto. A diferencia de los arrays, los miembros de una tupla no deben de ser del mismo tipo.

let user = ("Oscar Swanros", 22) // => (.0 "Oscar Swanros", .1 22)

En el ejemplo anterior, declaramos una tupla llamada user que contiene "Oscar Swanros" y 22 como sus miembros. En este caso, Swift infiere que la tupla sería de tipo (String, Int).

let (name, age) = user
print(name)   // #=> Oscar Swanros
print(age)    // #=> 22

El listado anterior muestra un ejemplo de lo que llamamos pattern matching, o “reconocimiento de patrones” en español. En una misma linea, utilizamos la sintaxis let (name, age) para recuperar los datos en la tupla yser. Los contenidos de la tupla se asignan a las constantes definidas siguiendo la siguiente regla: el primer miembro de la tupla se asigna a la primera constante, el segundo a la segunda, etc.

Usando un guión bajo, podemos ignorar uno o más miembros de la tupla al momento de recuperarlos:

let (_, age) = user
print(age)     // #=> 22

Podemos también hacer referencia a miembros de la tupla sin necesidad de recuperarlos y asignarlos a constantes o variables externas:

print(user.0)    // #=> Oscar Swanros
print(user.1)    // #=> 22

En el ejemplo anterior, user.0 hace referencia al primer miembro de la tupla, user.1 al segundo, y así sucesivamente. Los miembros de las tuplas, al igual que en un Array, están indexados desde el 0. Solamente ten en cuenta que una tupla no representa una lista de objetos.

Al igual que con las funciones y sus parámetros etiquetados, podemos poner etiquitas a los miembros de una tupla:

let user = (name: "Oscar Swanros", age: 22) // => (.0 "Oscar Swanros", .1 22)
user.name      // => Oscar Swanros
user.age       // => 22

Aunque una tupla no tiene un tipo único en Swift como Int, Array o String, podemos usar las tuplas como cualquier otro tipo de dato en nuestros programas. Incluso como tipo de retorno en funciones:

func createUser(name name: String, age: Int) -> (name: String, age: Int) {
    return (name, age)
}

let user = createUser(name: "Oscar Swanros", age: 22)
print(user.name)   // #=> Oscar Swanros
print(user.age)    // #=> 22

Es importante diferenciar las tuplas de los arrays.

  • Un array tiene elementos, puede ser manipulado, escrito y leído.
  • Una tupla tiene miembros, solamente pueden ser leídos y reemplazados de forma individual, siempre y cuando no se afecte el tipo de dato de la tupla.

Relacionados