Switch statements can handle each enum case explicitly.

Match every state

switch_enum.swift
enum TaskStatus {
    case queued
    case running
    case done
}

let step = 
let status: TaskStatus

if step == 0 {
    status = TaskStatus.queued
} else if step < 3 {
    status = TaskStatus.running
} else {
    status = TaskStatus.done
}

var message = ""
switch status {
case TaskStatus.queued:
    message = "waiting"
case TaskStatus.running:
    message = "working"
case TaskStatus.done:
    message = "complete"
}

print("step=\(step)")
print(message)
enum TaskStatus {
    case queued
    case running
    case done
}

let step = 
let status: TaskStatus

if step == 0 {
    status = TaskStatus.queued
} else if step < 3 {
    status = TaskStatus.running
} else {
    status = TaskStatus.done
}

var message = ""
switch status {
case TaskStatus.queued:
    message = "waiting"
case TaskStatus.running:
    message = "working"
case TaskStatus.done:
    message = "complete"
}

print("step=\(step)")
print(message)
enum TaskStatus {
    case queued
    case running
    case done
}

let step = 
let status: TaskStatus

if step == 0 {
    status = TaskStatus.queued
} else if step < 3 {
    status = TaskStatus.running
} else {
    status = TaskStatus.done
}

var message = ""
switch status {
case TaskStatus.queued:
    message = "waiting"
case TaskStatus.running:
    message = "working"
case TaskStatus.done:
    message = "complete"
}

print("step=\(step)")
print(message)
exhaustive switch Swift checks enum switches so every possible case is handled.