ENUMS en Swift en Español - Curso Swift | Tutorial Swift
Los Enums en Swift son muy útiles cuando trabajamos con el mismo tipo pero con valores que tienen relación entre sí. Son muy útiles para aplicar en ciertas partes de una app móvil. Por ejemplo los distintos estados que puede tener un mensaje de la típica app de mensajería (sent, received, etc)
Tabla de contenido
Los Enums definen un tipo común para un grupo de valores relacionados y permite trabajar con estos valores de una manera segura dentro de tu código.
También podemos usar associated values en cada case del Enum. Entraremos en detalle más abajo, pero vamos a ver un ejemplo para hacernos una idea:
Los Enums en Swift son value type, es decir, cuando se asigna a una variable su valor se copia. Igual que veíamos con las structs.
Recuerda que las clases eran reference type y por lo tanto cuando se asigna a varias variables, todas ellas comparten la misma referencia. Un cambio en una variable implica que también se aplica a las otras variables (con la misma referencia)
Sintaxis de un Enum en Swift
Como hemos visto en el ejemplo anterior, usamos la keyword Enum:
Podemos crear un enum que nos indique los puntos cardinales:
Podríamos defines todos los cases en una sola línea de la siguiente manera:
enum CompassPoint {
case north, south, east, west
}
Y para asignarlo a una variable es tan fácil como:
Matching con Switch en Swift
Es muy útil usar switch cuando tenemos un Enum, ya que en cada caso podemos aplicar una lógica distinta:
Iterando sobre los casos de un Enum en Swift
Con Swift 5.2 salió un protocolo para poder iterar de forma muy sencilla todos los casos de un Enum, solo nos basta con conformar CaseIterable en cualquier Enum para tener este comportamiento, vamos a ver un ejemplo:
Associated Values en Swift
Vamos a entrar más en detalle con los associated values. A veces no es útil guardar valores de otro tipo junto con el caso del Enum. Esa información "extra" que asociamos al case es un associated value, un ejemplo muy sencillo sería el siguiente:
Los associated values son muy útiles para aportar más información a cada case
Raw Values en Swift
Como alternativa a los associated values, los casos de un Enum pueden estar prepopulados con valores por defecto (llamados raw values), los cuales son del mismo tipo.
Aquí tenemos un ejemplo:
Los raw values pueden ser strings, characters o cualquier tipo que represente números.
Hay varias manera de dar este valor por defecto a los cases de un enum, en el caso de dar valores enteros podemos hacer:
enum Planet: Int {
case mercury = 1, venus, earth, mars, jupiter, saturn, uranus, neptune
}
Indicando que empezamos por el número 1 en mercury, y automáticamente se incrementará en uno en cada caso. Eso significa que venus tendrá un raw value de 2, earth de 3, etc.