Enum en Swift — qué es, sintaxis y uso

Autor: IT Sectr Publicado: 2026-06-17 Tiempo de lectura: 6 min

Enum en Swift es un tipo que une un grupo de valores relacionados bajo un solo nombre. A diferencia de C y Objective-C, donde enum es solo un conjunto de constantes enteras, Swift ofrece enumeraciones de primera clase con associated values, raw values, métodos y soporte de protocolos. Según Apple, 2026, enum es una de las herramientas clave para el modelado tiposeguro de estados en el desarrollo iOS.

Puntos Clave

  • Enum — un tipo para un grupo de valores relacionados, garantizando tiposeguridad
  • Raw Values — valores del mismo tipo asignados a todos los casos de la enumeración
  • Associated Values — diferentes tipos de datos adjuntos a cada caso individualmente
  • Casos se declaran con la palabra clave case y pueden contener métodos
  • Switch con enum requiere manejo exhaustivo por parte del compilador

¿Qué es enum en Swift?

Enum (enumeración) es un tipo de datos personalizado que une un conjunto finito de variantes mutuamente excluyentes. En Swift, enum no son solo constantes numéricas, sino un tipo completo con su propia lógica.

Cada variante de la enumeración se llama caso. A diferencia de Objective-C, donde enum se reduce a un tipo entero, Swift permite que cada caso almacene sus propios datos y tenga métodos.

Según Apple, enum en Swift admite genéricos, inicializadores, propiedades computadas y conformidad con protocolos, lo que lo hace aplicable para modelar estados, errores, opciones y máquinas de estados finitos.

Use enum siempre que necesite representar un conjunto finito de variantes mutuamente excluyentes: estados de pantalla, tipos de error, direcciones, opciones de filtrado.

Sintaxis de declaración de enum

Enum se declara con la palabra clave enum seguida de un nombre y un cuerpo entre llaves.

swift
enum CompassDirection {
    case north
    case south
    case east
    case west
}

Los casos se pueden declarar en una sola línea separados por una coma:

swift
enum Planet {
    case mercury, venus, earth, mars, jupiter, saturn, uranus, neptune
}

Para acceder a un caso, use la sintaxis de punto después del tipo conocido:

swift
let direction = CompassDirection.north
// El tipo es conocido: sintaxis abreviada disponible:
var currentPlanet = .earth

Una vez que a una variable se le asigna un tipo enum conocido, Swift infiere automáticamente el tipo, permitiendo omitir el nombre de la enumeración al acceder a los casos.

Raw Values en enumeraciones

Raw Values son valores de un solo tipo asignados a cada caso de enum. A diferencia de los associated values, los raw values son del mismo tipo para todos los casos y se definen en el momento de la declaración.

swift
enum HTTPStatusCode: Int {
    case ok = 200
    case notFound = 404
    case internalServerError = 500
}

let code = HTTPStatusCode.notFound
print(code.rawValue) // 404

Para raw values enteros, Swift incrementa automáticamente los valores si solo el primero se establece explícitamente:

swift
enum Status: Int {
    case pending = 1
    case active      // 2
    case completed   // 3
}

Los raw values pueden ser de tipos Int, String, Character o cualquier tipo que conforme al protocolo RawRepresentable. Swift genera automáticamente el inicializador init? para crear un enum a partir de un raw value, conveniente para analizar datos de APIs.

Associated Values en enum

Associated Values permiten vincular diferentes tipos de datos a cada caso de enum individualmente. A diferencia de los raw values, los associated values pueden diferir en tipo y cantidad.

swift
enum NetworkError {
    case timeout(seconds: Int)
    case httpError(code: Int, message: String)
    case noConnection
    case unknown(error: Error)
}

Al procesar con switch, los associated values se extraen mediante la vinculación a variables o constantes:

swift
let error = NetworkError.httpError(code: 403, message: "Forbidden")

switch error {
case .timeout(let seconds):
    print("Tiempo de espera agotado tras \(seconds)s")
case .httpError(let code, let message):
    print("HTTP \(code): \(message)")
case .noConnection:
    print("Sin conexión")
case .unknown(let err):
    print("Desconocido: \(err.localizedDescription)")
}

Según la documentación de Apple, los associated values hacen de enum una herramienta expresiva para modelar estados complejos sin crear tipos contenedores separados. Úselos para escenarios tipo Result y modelado de errores con contexto.

Enum recursivo (indirect)

Enum recursivo — una enumeración cuyos casos hacen referencia al propio tipo enum. Dichos casos se marcan con la palabra clave indirect.

swift
indirect enum LinkedList<T> {
    case empty
    case node(value: T, next: LinkedList<T>)
}

Usar indirect antes de enum marca todos los casos como recursivos. Alternativamente, puede marcar solo un caso específico con indirect:

swift
enum ArithmeticExpression {
    case number(Int)
    indirect case addition(ArithmeticExpression, ArithmeticExpression)
    indirect case multiplication(ArithmeticExpression, ArithmeticExpression)
}

Swift usa indirect para almacenar casos recursivos como referencias (semántica de referencia) en lugar de valores, lo que evita un tamaño infinito de enum en la pila. Los enum recursivos se usan ampliamente en la construcción de árboles, listas enlazadas y AST.

Enum y protocolos

Enum puede conformar protocolos igual que las estructuras y las clases. Esta es una característica clave de la programación orientada a protocolos en Swift.

swift
protocol Describable {
    var description: String { get }
}

enum PaymentMethod: Describable {
    case creditCard(last4: String)
    case applePay
    case bankTransfer

    var description: String {
        switch self {
        case .creditCard(let last4):
            return "Card ending in \(last4)"
        case .applePay:
            return "Apple Pay"
        case .bankTransfer:
            return "Bank Transfer"
        }
    }
}

Enum también puede conformar protocolos de Cocoa, por ejemplo, CaseIterable para la generación automática de una colección de todos los casos, o Codable para serialización. Esto hace de enum un bloque de construcción versátil en aplicaciones Swift.

Preguntas Frecuentes

¿En qué se diferencia enum de struct en Swift?

Enum es un tipo con un conjunto finito de variantes mutuamente excluyentes, mientras que struct es un tipo con un conjunto arbitrario de propiedades. Enum no puede tener stored properties, pero admite computed properties y métodos.

¿Puede un enum tener raw values y associated values al mismo tiempo?

No, un enum no puede tener raw values y associated values simultáneamente. Los raw values son valores del mismo tipo para todos los casos, mientras que los associated values son datos individuales para cada caso. Estos mecanismos son mutuamente excluyentes.

¿Cómo obtener un array de todos los casos de un enum?

Agregue conformidad al protocolo CaseIterable. Swift generará automáticamente la propiedad allCases, que devuelve una colección de todos los casos en orden de declaración. Esto es conveniente para iterar sobre todas las variantes.

¿Es obligatorio usar switch para manejar un enum?

Switch es la forma más segura porque el compilador verifica la cobertura exhaustiva. Puede usar if case para verificar un solo caso o == para enum sin associated values.

¿Se puede crear un enum con genéricos?

, enum admite genéricos: enum Result<T, E> { case success(T); case failure(E) }. Esto permite crear construcciones genéricas tiposeguras para manejar éxito y error.

Resumen

  • Enum en Swift es un tipo completo con soporte para métodos, genéricos y protocolos
  • Raw Values permiten establecer valores del mismo tipo para todos los casos
  • Associated Values permiten vincular diferentes datos a cada caso
  • Los casos Indirect son necesarios para estructuras recursivas en enum
  • Protocolos pueden ser implementados por enum — esta es la base de POP en Swift
  • Switch con enum garantiza manejo exhaustivo en tiempo de compilación
  • Use enum para modelar estados finitos y opciones tiposeguras

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también