# Swift Enumerations

> An introduction to enumerations in Swift: how to group options under a type, use them in switch statements, and assign raw values you read with rawValue.

Author: Flavio Copes | Published: 2021-06-08 | Canonical: https://flaviocopes.com/swift-enumerations/

> This tutorial belongs to the [Swift](https://flaviocopes.com/swift-introduction/) series

Enumerations are a way to group a set of different options, under a common name.

Example:

```swift
enum Animal {
    case dog
    case cat
    case mouse
    case horse
}
```

This `Animal` enum is now a **type**.

A type whose value can only be one of the cases listed.

If you define a variable of type `Animal`:

```swift
var animal: Animal
```

you can later decide which value to assign it using this syntax:

```swift
var animal: Animal
animal = .dog
```

We can use enumerations in control structures like switches:

```swift
enum Animal {
    case dog
    case cat
    case mouse
    case horse
}

let animal = Animal.dog

switch animal {
case .dog: print("dog")
case .cat: print("cat")
default: print("another animal")
}
```

Enumerations values can be strings, characters or numbers.

You can also define an enum on a single line:

```swift
enum Animal {
    case dog, cat, mouse, horse
}
```

And you can also add type declaration to the enumeration, and each case has a value of that type assigned:

```swift
enum Animal: Int {
    case dog = 1
    case cat = 2
    case mouse = 3
    case horse = 4
}
```

Once you have a variable, you can get this value using its `rawValue` property:

```swift
enum Animal: Int {
    case dog = 1
    case cat = 2
    case mouse = 3
    case horse = 4
}

var animal: Animal
animal = .dog

animal.rawValue //1
```

Enumerations are a value type. This means they are copied when passed to a function, or when returned from a function. And when we assign a variable pointing to an enumeration to another variable.
