Una enumeración es un tipo de dato con valores limitados. Se puede asignar cualquier nombre a los casos de la enumeración.
enum TipoDeEnumeracion {
case estado1, estado2
case estado3
}
variable = .estado1
variable = TipoDeEnumeracion.estado2 // Ambas sintaxis son válidas
Evaluando posibles casos del enum con switch
Se puede evaluar el valor de una enumeración con un switch, garantizando que se cubran todos los casos. @unknown default permite levantar una advertencia (y no un error) en el caso de que aparezca un nuevo caso y sea manejado por la rama default.
enum TipoDeEnumeracion: Int {
case estado1 = 0, estado2
case estado3
}
var variable: TipoDeEnumeracion = TipoDeEnumeracion(rawValue: Int.random(in: 0..<3))!
switch variable {
case .estado1:
print("Estado 1")
case .estado2, .estado3:
print("Estado2 2 y 3")
@unknown default: // Esto saca una advertencia cuando se cree un nuevo estado
print("Este estado no fue manejado")
}
Valores crudos
Los casos de una enumeración pueden tener una representación en otro dominio, lo cual se conoce como valor crudo, o "Raw Value".
En el siguiente ejemplo, voy a representar cada estado de TipoDeEnumeración con un valor tipo String.
enum TipoDeEnumeracion: String {
case estado1 = "uno", estado2 = "dos"
case estado3 = "tres"
}
var variable = TipoDeEnumeracion.estado1
print(variable.rawValue) // "uno"
Enumeraciones con métodos
Las enumeraciones de Swift pueden tener métodos
enum TipoDeEnumeracion: String {
case estado1 = "uno", estado2 = "dos"
case estado3 = "tres"
func saludar() -> String {
switch self {
case .estado1:
return "Estoy en el estado 1"
case .estado2:
return "No debería estar acá"
case .estado3:
return "Necesito cambiar de estado"
}
}
}
var variable = TipoDeEnumeracion.estado1
print(variable.saludar()) // "Estoy en el estado 1"
Valores asociados a un caso
Es posible adjuntar valores a un caso de una enumeración.
enum TipoDeEnumeracion {
case estado1(Int)
case estado2(Bool, String)
case estado3
func saludar() -> String {
switch self {
case .estado1(let x):
return "Estoy en el estado 1 con adjunto: \(x)"
case .estado2(let x, let y):
return "No debería estar acá con adjuntos: \(x), \(y)"
case .estado3:
return "Necesito cambiar de estado"
}
}
}
var variable = TipoDeEnumeracion.estado1(77)
print(variable.saludar()) // "Estoy en el estado 1 con adjunto: 77"
variable = .estado2(false, "Hola")
print(variable.saludar()) // "No debería estar acá con adjuntos: false, Hola"
Comparar un caso específico de enumeración
Para comparar un caso específico se usa if case <caso-especifico> = variableEnum.
enum TipoDeEnumeracion {
case estado1(Int)
case estado2(Bool, String)
case estado3
}
var variable = TipoDeEnumeracion.estado1(77)
if case .estado1(let x) = variable {
print("Estoy en el estado 1 con adjunto: \(x)")
}
Top comments (0)