Last Run on XCODE 11.6 / Swift 5.2

Definition Link to heading

CaseIterable is a protocol in Swift, that typically lets an enumeration to provide all of its cases as a collection.

Lets look at a simple example from my RoadRage car game. This is an enum type called TrafficType listing the cases of traffic/obstacle Sprites generated in my RoadRage car game.

enum TrafficType: UInt32 {
    case Police
    case Ambulance
    case FireTruck
    case Van
    case SportsCar
    case Taxi
}

In my game I would like to find out the total count of the TrafficType entities. I would also like the ability to randomly pick a traffic object from the list to keep generating obstacles during the game loop. And to achive that is as simple as conforming to the CaseIterable protocol in the enum.

Conforming to CaseIterable Link to heading

enum TrafficType: UInt32, CaseIterable {
    case Police
    case Ambulance
    case FireTruck
    case Van
    case SportsCar
    case Taxi
}

As you can see, it was as simple as adding the keyword “CaseIterable” to the enum. The swift compiler will automatically synthesize all the cases in an appropriately named collections variable “allCases”.

// Total Traffic Type Entities
print("\(TrafficType.allCases.count)")

// Traffic Entity at a specific index.
print("\(TrafficType.allCases[3])")

// Iterating through each of the TrafficType entities.
for traffic in TrafficType.allCases {
    print("\(traffic)")
}