Volver a la página principal
miércoles 11 septiembre 2024
14

Cómo usar enums en Swift

¿Qué son los enums en Swift?

Un enum en Swift define un tipo de datos que puede tener un conjunto fijo de valores relacionados, conocidos como *casos*. Los enums permiten manejar opciones predefinidas y son útiles para modelar estados o categorías específicas en tu código de forma segura y clara. Además, en Swift, los enums son más potentes que en otros lenguajes porque pueden tener métodos, propiedades y valores asociados.

Sintaxis básica de un enum

La declaración básica de un enum en Swift se realiza con la palabra clave enum, seguida del nombre del enum y sus casos.

enum Dirección {
    case norte
    case sur
    case este
    case oeste
}

En este ejemplo, Dirección es un enum que define cuatro posibles valores: norte, sur, este, y oeste.

Uso de enums

Para utilizar un enum, simplemente asignas uno de sus valores a una variable o constante.

let direccionActual = Dirección.norte

Si el tipo de la variable ya es conocido, puedes utilizar la abreviación de punto:

let nuevaDireccion: Dirección = .oeste

Comparación de enums

Puedes comparar valores de un enum utilizando el operador de igualdad (==).

if direccionActual == .norte {
    print("Vas hacia el norte")
}

Enums con valores asociados

Swift permite que los enums tengan valores asociados. Esto significa que cada caso de un enum puede tener un valor adicional que lo acompaña, como parámetros adicionales.

Ejemplo con valores asociados

enum Resultado {
    case exito(mensaje: String)
    case error(codigo: Int)
}

let resultadoExitoso = Resultado.exito(mensaje: "Operación completada")
let resultadoFallido = Resultado.error(codigo: 404)

En este ejemplo:

  • Resultado tiene dos casos: exito y error.
  • Cada caso lleva consigo un valor adicional: una cadena en el caso de éxito y un número entero en el caso de error.

Extracción de valores asociados

Para acceder a los valores asociados de un enum, se utiliza una declaración switch que permite descomponer el enum y extraer los valores.

switch resultadoExitoso {
case .exito(let mensaje):
    print("Éxito: \(mensaje)")
case .error(let codigo):
    print("Error: Código \(codigo)")
}

Enums con valores crudos (Raw Values)

Además de los valores asociados, los enums en Swift también pueden tener valores crudos (*raw values*), que son valores predefinidos para cada caso. Estos valores pueden ser de tipos como String, Int, o Double.

Ejemplo de enums con valores crudos

enum Moneda: String {
    case dolar = "USD"
    case euro = "EUR"
    case yen = "JPY"
}

Aquí, cada caso del enum Moneda está asociado con un valor crudo de tipo String.

Puedes acceder al valor crudo de un enum de la siguiente manera:

let tipoDeMoneda = Moneda.euro
print("El valor crudo de la moneda es \(tipoDeMoneda.rawValue)")

Salida:

El valor crudo de la moneda es EUR

Inicialización con valores crudos

Es posible inicializar un enum a partir de su valor crudo, aunque esta inicialización es opcional y puede devolver nil si el valor no coincide con ningún caso.

if let moneda = Moneda(rawValue: "USD") {
    print("La moneda seleccionada es \(moneda)")
} else {
    print("Moneda no válida")
}

Enums con métodos

Los enums en Swift pueden tener métodos asociados que añaden funcionalidad, permitiéndoles comportarse como objetos completos.

Ejemplo de enum con método

enum Semaforo {
    case rojo, amarillo, verde

    func mensaje() -> String {
        switch self {
        case .rojo:
            return "Detente"
        case .amarillo:
            return "Prepárate"
        case .verde:
            return "Avanza"
        }
    }
}

let estadoActual = Semaforo.amarillo
print(estadoActual.mensaje())

Salida:

Prepárate

Enums recursivos

Swift permite declarar enums recursivos, donde uno de los casos puede contener una instancia del mismo enum como valor asociado. Para esto, se utiliza la palabra clave indirect.

Ejemplo de enum recursivo

indirect enum ExpresionAritmetica {
    case numero(Int)
    case suma(ExpresionAritmetica, ExpresionAritmetica)
    case multiplicacion(ExpresionAritmetica, ExpresionAritmetica)
}

let operacion = ExpresionAritmetica.suma(.numero(3), .multiplicacion(.numero(2), .numero(4)))

Este ejemplo representa una operación aritmética recursiva que permite expresar operaciones como sumas y multiplicaciones entre números y otras expresiones.

Conclusión

Los enums en Swift son una herramienta versátil que te permite definir tipos de datos con valores predefinidos, valores asociados y raw values, además de la capacidad de agregar métodos. Esto hace que los enums en Swift sean más poderosos que en otros lenguajes, proporcionando flexibilidad para manejar diversas situaciones en el código.

Para más información sobre enums en Swift, visita la documentación oficial de Swift.

Etiquetas:
swift
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer