'Enums con valores asociados' en Swift permiten que cada caso mantenga valores individuales (de diferentes tipos). Este enum se convierte efectivamente en un tipo de dato algebraico (Algebraic Data Type), lo que se adapta perfectamente para expresar un conjunto finito de opciones con diferentes datos adicionales.
Utiliza esta construcción:
Ejemplo de código:
enum NetworkResult { case success(data: Data) case failure(error: Error) } func handle(result: NetworkResult) { switch result { case .success(let data): print("Datos recibidos: \(data)") case .failure(let error): print("Error: \(error.localizedDescription)") } }
¿Se puede crear un enum dentro de otro enum (enums anidados), y para qué podría ser útil?
Respuesta: Sí, Swift admite enumeraciones anidadas. Esto es conveniente para modelar estados anidados y proporcionar alcance. Por ejemplo:
enum PaymentStatus { enum ErrorType { case declined, timeout } case success(amount: Double) case failure(type: ErrorType) }
Historia
En un proyecto se implementó un modelo complejo de estados de solicitud a través de un enum con valores asociados, sin embargo, al agregar nuevos casos en el switch no se realizó el manejo de default. Esto llevó a errores silenciosos, que eran difíciles de detectar en tiempo de ejecución, en lugar de en la etapa de compilación.
Historia
Un desarrollador intentó serializar un enum con valores asociados directamente en JSON. Sin soporte manual de Codable para cada caso, la aplicación perdía datos durante la decodificación, lo que causaba errores críticos al sincronizarse con el servidor.
Historia
En la capa de red, solo se usaron clases para pasar errores, en lugar de enums. Debido a esto, la lista de errores creció rápidamente, aparecieron tipos duplicados y se complicó el mantenimiento, a diferencia de una solución con enums, donde la lista de errores sería type-safe y centralizada.