Enumerations, often referred to as enums, are a versatile and powerful feature of the Swift programming language. They allow you to work with a group of related values in a type-safe way, helping to enhance code readability, maintainability, and safety.
Enums in Swift are defined using the enum
keyword, followed by the name and the cases that the enumeration can take. Here is a simple example of defining an enumeration to represent the cardinal directions:
enum CompassDirection {
case north
case south
case east
case west
}
Each case in an enum starts with the case
keyword and multiple cases can be written on a single line, separated by commas.
To use an enum, you instantiate it with a case value. Swift provides type inference, allowing you to omit the type when assigning a value from an enum:
var directionToHead: CompassDirection = .north
directionToHead = .west
Enums in Swift can store associated values of any predefined type, allowing for more expressive and flexible data handling. Here's an example of an enum that captures different barcode types, each with different associated values:
enum Barcode {
case upc(Int, Int, Int, Int)
case qrCode(String)
}
You can assign and manage different values according to the associated type of each case.
Enums can also be initialized with raw values, providing default representations for each case. The raw values must be of the same type and can be strings, characters, or any integer or floating-point number:
enum Planet: Int {
case mercury = 1
case venus
case earth
case mars
}
The raw value of a case can be accessed using rawValue
.
Swift enables all cases of an enum to be iterable by using the CaseIterable
protocol. This is especially useful when you need to iterate through or count all the possible cases:
enum Beverage: CaseIterable {
case coffee, tea, juice
}
let numberOfChoices = Beverage.allCases.count
Enumerations in Swift are a powerful tool that adds clarity and reliability to your codebase. The ability to define associated values and raw values enhances the capability of enums beyond simple grouping of values, making them integral to effective Swift development.