Las tuplas agrupan varios valores en un único valor compuesto. A diferencia de los arrays, los valores de una tupla no necesitan compartir el mismo tipo, y el tamaño de una tupla es fijo una vez que se crea.
Para crear una tupla, encierra entre paréntesis valores separados por comas:
let order = ("biscuits", 2.99, 3)
También puedes especificar anotaciones de tipo de forma explícita:
let order: (String, Double, Int) = ("biscuits", 2.99, 3)
Para extraer elementos individuales de una tupla sin nombres, usa la sintaxis de índice que empieza en cero (.0, .1, etc.):
let item = order.0 // "biscuits"
let quantity = order.2 // 3
Puedes darle nombres a los elementos individuales de una tupla cuando la defines:
let order = (item: "biscuits", price: 2.99, quantity: 3)
Nombrar los elementos hace que el código sea más legible y te permite acceder a los elementos usando la notación de punto con sus etiquetas:
let item = order.item // "biscuits"
let quantity = order.quantity // 3
También puedes incluir los nombres de los elementos en la anotación de tipo:
let order: (item: String, price: Double, quantity: Int) = (item: "biscuits", price: 2.99, quantity: 3)
Si una tupla se declara como una variable (var), puedes actualizar sus elementos:
var order = ("biscuits", 2.99, 3)
order.0 = "cookies"
order.1 = 1.99
order.2 = 5
print(order)
// Prints ("cookies", 1.99, 5)
Si bien las funciones de Swift solo pueden devolver un único valor, devolver una tupla te permite empaquetar y devolver varios valores desde una función:
func divide(_ dividend: Int, by divisor: Int) -> (quotient: Int, remainder: Int) {
let quotient = dividend / divisor
let remainder = dividend % divisor
return (quotient, remainder)
}
let result = divide(14, by: 4)
print("Quotient: \(result.quotient), Remainder: \(result.remainder)")
// Prints "Quotient: 3, Remainder: 2"
Puedes descomponer (desempaquetar) los valores de una tupla en constantes o variables separadas:
let order = ("biscuits", 2.99, 3)
let (item, price, quantity) = order
print(item) // Prints "biscuits"
La descomposición de tuplas también funciona directamente en los bucles for-in:
let orders = [("biscuits", 2.99, 3), ("cookies", 1.99, 5)]
for (item, price, quantity) in orders {
print("Item: \(item), Price: \(price), Quantity: \(quantity)")
}
Eres un elfo que trabaja en la división de logística de Santa Claus y el jefe te ha encargado un par de tareas para actualizar el software del sistema.
El sistema necesita poder obtener el nombre de un juguete de la base de datos.
La base de datos está hecha de tuplas de tipo (name: String, quantity: Int).
Implementa la función getName(_:), que recibe un argumento que contiene una tupla de tipo (name: String, quantity: Int).
let toy = (name: "Doll", quantity: 10)
getName(toy)
// Returns "Doll"
El mercado de juguetes es un mercado rápido y cambiante; lo que es popular cambia muy rápido. Por eso se necesita una función que cree un nuevo juguete.
Implementa la función createToy(name:amount:), que recibe un argumento name que contiene el nombre del juguete y amount que contiene la cantidad del juguete.
createToy(name: "Doll", amount: 10)
// Returns (name: "Doll", amount: 10)
Los elfos en el taller de Santa están constantemente haciendo más juguetes, y Santa necesita llevar un registro de la cantidad de cada juguete. Para hacerlo, el sistema necesita poder actualizar la cantidad de un juguete en la base de datos.
Implementa la función updateQuantity(_:toy:Amount:), que recibe los argumentos:
toys, que contiene un array de tuplas de tipo (name: String, quantity: Int).toy, que contiene el nombre del juguete a actualizar.amount, que contiene la nueva cantidad del juguete.Puedes asumir que el juguete ya está en la base de datos y no necesitas verificarlo.
let toys = [(name: "Doll", quantity: 10), (name: "Car", quantity: 5), (name: "Train", quantity: 3)]
updateQuantity(toys, toy: "Doll", amount: 15)
// Returns [(name: "Doll", quantity: 15), (name: "Car", quantity: 5), (name: "Train", quantity: 3)]
Santa quiere poder categorizar los juguetes en la base de datos. Esto es para que puedan encontrar fácilmente los juguetes cuando necesiten hacer una entrega, y para poder ordenar los juguetes en la base de datos.
Sin embargo, cuando el sistema se implementó por primera vez, se olvidó la clave de categoría. Ahora el sistema necesita poder agregar una clave de categoría a un juguete en la base de datos.
Implementa la función addCategory(_:category:), que recibe los argumentos:
toys, que contiene un array de tuplas de tipo (name: String, quantity: Int).category, que contiene la clave de categoría que se agregará a los juguetes.Puedes asumir que el juguete ya está en la base de datos y no necesitas verificarlo. También puedes asumir que todavía no hay una clave de categoría en el juguete.
let toys = [(name: "Car", quantity: 5), (name: "Train", quantity: 3)]
addCategory(toys, category: "Vehicle")
// Returns [(name: "Car", quantity: 5, category: "Vehicle"), (name: "Train", quantity: 3, category: "Vehicle")]
Regístrate en Exercism para aprender y dominar Swift con 35 conceptos116 ejercicios y mentoría humana real, todo gratis.