Swift - Enumeraciones
Una enumeración es un tipo de datos definido por el usuario que consta de un conjunto de valores relacionados. Palabra claveenum se utiliza para definir el tipo de datos enumerados.
Funcionalidad de enumeración
La enumeración en Swift 4 también se parece a la estructura de C y Objective C.
Se declara en una clase y se accede a sus valores a través de la instancia de esa clase.
El valor del miembro inicial se define mediante inicializadores de enumeración.
Su funcionalidad también se amplía al garantizar la funcionalidad del protocolo estándar.
Sintaxis
Las enumeraciones se introducen con la palabra clave enum y colocan su definición completa dentro de un par de llaves:
enum enumname {
// enumeration values are described here
}
Por ejemplo, puede definir una enumeración para los días de la semana de la siguiente manera:
enum DaysofaWeek {
case Sunday
case Monday
---
case Saturday
}
Ejemplo
enum names {
case Swift
case Closures
}
var lang = names.Closures
lang = .Closures
switch lang {
case .Swift:
print("Welcome to Swift")
case .Closures:
print("Welcome to Closures")
default:
print("Introduction")
}
Cuando ejecutamos el programa anterior usando el patio de recreo, obtenemos el siguiente resultado:
Welcome to Closures
La enumeración Swift 4 no asigna a sus miembros un valor predeterminado como C y Objetivo C. En cambio, los miembros se definen explícitamente por sus nombres de enumeración. El nombre de la enumeración debe comenzar con una letra mayúscula (p. Ej., Enumeración DaysofaWeek).
var weekDay = DaysofaWeek.Sunday
Aquí el nombre de enumeración 'DaysofaWeek' se asigna a una variable weekday.Sunday. Informa al compilador que el tipo de datos que pertenece a Sunday se asignará a los miembros de enumeración posteriores de esa clase en particular. Una vez que se define el tipo de datos del miembro enum, se puede acceder a los miembros pasando valores y cálculos adicionales.
Enumeración con instrucción Switch
La declaración Swift 4 'Switch' también sigue a la selección de múltiples vías. Solo se accede a una variable en un momento determinado en función de la condición especificada. El caso predeterminado en la instrucción switch se usa para atrapar casos no especificados.
enum Climate {
case India
case America
case Africa
case Australia
}
var season = Climate.America
season = .America
switch season {
case .India:
print("Climate is Hot")
case .America:
print("Climate is Cold")
case .Africa:
print("Climate is Moderate")
case .Australia:
print("Climate is Rainy")
}
Cuando ejecutamos el programa anterior usando el patio de recreo, obtenemos el siguiente resultado:
Climate is Cold
El programa primero define Clima como el nombre de la enumeración. Entonces sus miembros como 'India', 'América', 'África' y 'Australia' son declarados pertenecientes a la clase 'Clima'. Ahora el miembro América está asignado a una variable de temporada. Además, Switch case verá los valores correspondientes a .America y se ramificará a esa declaración en particular. La salida se mostrará como "El clima es frío". Asimismo, se puede acceder a todos los miembros mediante declaraciones de cambio. Cuando no se cumple la condición, se imprime de forma predeterminada "El clima no es predecible".
La enumeración se puede clasificar adicionalmente en valores asociados y valores brutos.
Diferencia entre valores asociados y valores brutos
Valores asociados | Valores crudos |
Diferentes tipos de datos | Mismos tipos de datos |
Ejemplo: enumeración {10,0.8, "Hola"} | Ejemplo: enum {10,35,50} |
Los valores se crean en base a constante o variable | Valores rellenados previamente |
Varía cuando se declara cada vez | El valor para el miembro es el mismo |
Enum con valores asociados
enum Student {
case Name(String)
case Mark(Int,Int,Int)
}
var studDetails = Student.Name("Swift 4")
var studMarks = Student.Mark(98,97,95)
switch studMarks {
case .Name(let studName):
print("Student name is: \(studName).")
case .Mark(let Mark1, let Mark2, let Mark3):
print("Student Marks are: \(Mark1),\(Mark2),\(Mark3).")
}
Cuando ejecutamos el programa anterior usando el patio de recreo, obtenemos el siguiente resultado:
Student Marks are: 98,97,95.
Considere, por ejemplo, acceder al nombre de los estudiantes y las marcas aseguradas en tres materias, el nombre de la enumeración se declara como estudiante y los miembros presentes en la clase de enumeración son nombres que pertenecen al tipo de datos de cadena, las marcas se representan como mark1, mark2 y mark3 del tipo de datos Integer. Para acceder al nombre del estudiante o las calificaciones que ha obtenido
var studDetails = Student.Name("Swift")
var studMarks = Student.Mark(98,97,95)
Ahora, el caso del interruptor imprimirá el nombre del estudiante si ese bloque de caso se ejecuta, de lo contrario, imprimirá las marcas aseguradas por el estudiante. Si ambas condiciones fallan, se ejecutará el bloque predeterminado.
Enum con valores crudos
Los valores brutos pueden ser cadenas, caracteres o cualquiera de los tipos de números enteros o de punto flotante. Cada valor bruto debe ser único dentro de su declaración de enumeración. Cuando se utilizan números enteros para valores sin procesar, se incrementan automáticamente si no se especifica ningún valor para algunos de los miembros de la enumeración.
enum Month: Int {
case January = 1, February, March, April, May, June, July, August,
September, October, November, December
}
let yearMonth = Month.May.rawValue
print("Value of the Month is: \(yearMonth).")
Cuando ejecutamos el programa anterior usando el patio de recreo, obtenemos el siguiente resultado:
Value of the Month is: 5.