Diccionarios en Swift para datos complejos

Resumen

Cuando trabajas con datos simples como un string o un número, basta con una variable. Pero al modelar entidades reales en Swift, como un producto de una tienda virtual, necesitas algo más potente: los diccionarios o mapas, una estructura que asocia llaves con valores y te permite organizar información compleja sin perder claridad.

¿Qué es un diccionario en Swift y para qué sirve?

Un diccionario en Swift es una colección de pares llave-valor que te permite acceder a la información usando una etiqueta descriptiva en lugar de un índice numérico. Piensa en un producto de e-commerce: no basta con su nombre, también necesitas precio, stock, descripción, reseñas y más. Un mapa te deja agrupar todo eso en una sola variable.

¿Cuál es la diferencia entre un arreglo y un diccionario en Swift? El arreglo guarda valores en orden y los accedes por índice numérico. El diccionario los guarda por llaves descriptivas como nombre o precio, lo que hace la lectura más clara cuando trabajas con entidades.

Cómo declarar un mapa con tipos mixtos

La sintaxis básica usa corchetes y dos puntos entre la llave y el valor [00:53]. Si todos los valores son del mismo tipo, Swift lo infiere. Pero si mezclas strings, números y booleanos, necesitas declarar explícitamente el tipo con [String: Any], donde Any indica que el valor puede ser de cualquier tipo [02:13].

swift var producto: [String: Any] = [ "id": 1, "nombre": "PC Lenovo", "precio": 1000, "stock": 10, "promocion": true ]

Fíjate en algo importante: cada par va separado por coma y la llave casi siempre es de tipo string, porque describe semánticamente la propiedad.

¿Cómo accedo a los valores de un diccionario en Swift?

Para obtener un valor, usas el nombre de la variable seguido de la llave entre corchetes. Por ejemplo, producto["nombre"] devuelve PC Lenovo, pero te lo entrega como opcional porque Swift no garantiza que esa llave exista [03:38].

Si declaraste el diccionario con valores Any, además debes hacer un cast al tipo concreto usando la palabra clave as. Aquí entra el unwrap que viste en la clase de opcionales:

swift var nombre = producto["nombre"] as! String print(nombre) // PC Lenovo

El operador as! le dice al compilador: confío plenamente en que este valor es un string. Si te equivocas con el tipo, la app crashea, así que úsalo solo cuando estés seguro.

Cómo agregar nuevas llaves a un diccionario

Agregar propiedades es directo: asignas un valor a una llave que aún no existe y Swift la crea por ti [04:32]. Imagina que llega un requerimiento nuevo y necesitas guardar la calificación del producto.

swift producto["calificacion"] = 5

Al imprimir el producto, verás la nueva llave junto con las anteriores. No necesitas redeclarar nada.

¿Cómo modifico o elimino valores en un mapa de Swift?

Modificar valores funciona con la misma notación que usas para crearlos. Si tu producto pasó de tener un stock de 10 a una sola unidad y la gerencia decide subir el precio de 1000 a 2000 dólares, basta con reasignar [05:21]:

swift producto["stock"] = 1 producto["precio"] = 2000

Para eliminar elementos tienes tres caminos según lo que necesites:

  • producto.removeValue(forKey: "promocion") elimina una llave específica.
  • producto["stock"] = nil también borra la llave asignándole valor nulo.
  • producto.removeAll() vacía el diccionario completo y te deja un mapa sin llaves ni valores [06:42].

¿Qué hace removeValue en un diccionario de Swift? Borra el par llave-valor que le indiques y devuelve el valor eliminado. Es la forma explícita y segura de quitar una propiedad sin afectar el resto del mapa.

Reto: cantidad de habitantes por país

Para cerrar, ponte a prueba con esta función. Tienes un diccionario [String: Int] donde la llave es el nombre del país y el valor es su cantidad de habitantes. Crea una función getHabitantesPorPais que reciba un país como parámetro y devuelva el mensaje: "En [país] hay [cantidad] habitantes".

Si el país no existe en el diccionario, debe retornar: "No tengo datos suficientes para una respuesta esclarecedora". Como pista, investiga cómo combinar las propiedades keys y contains para validar la existencia de la llave antes de acceder a su valor.

Cuéntame en los comentarios cómo lo resolviste y qué dificultades encontraste.