Bird
Raised Fist0
Swiftprogramming~20 mins

Switch must be exhaustive in Swift - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Swift Switch Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this exhaustive switch?

Consider the following Swift code with an exhaustive switch on an enum. What will it print?

Swift
enum Direction {
    case north, south, east, west
}

let dir = Direction.east

switch dir {
case .north:
    print("Going north")
case .south:
    print("Going south")
case .east:
    print("Going east")
case .west:
    print("Going west")
}
AGoing east
BGoing north
CCompilation error: switch not exhaustive
DRuntime error
Attempts:
2 left
💡 Hint

Check if all enum cases are covered in the switch.

❓ Predict Output
intermediate
2:00remaining
What error does this non-exhaustive switch cause?

What error will this Swift code produce?

Swift
enum Color {
    case red, green, blue
}

let c = Color.green

switch c {
case .red:
    print("Red")
case .blue:
    print("Blue")
}
ACompilation error: switch must be exhaustive
BRuntime error: missing case green
CPrints nothing
DPrints "Green"
Attempts:
2 left
💡 Hint

Swift requires switches on enums to cover all cases or have a default.

🧠 Conceptual
advanced
1:30remaining
Why must switches on enums be exhaustive in Swift?

Why does Swift require switches on enums to be exhaustive?

ATo make the code run faster by skipping unhandled cases
BTo allow the compiler to optimize memory usage
CTo ensure all possible cases are handled, preventing unexpected behavior at runtime
DBecause Swift does not support default cases in switches
Attempts:
2 left
💡 Hint

Think about safety and predictability in code.

📝 Syntax
advanced
2:00remaining
Which switch is exhaustive for this enum?

Given the enum below, which switch statement is exhaustive and compiles without error?

Swift
enum Status {
    case success
    case failure
    case unknown
}
A
switch status {
case .success:
    print("Success")
case .failure:
    print("Failure")
}
B
switch status {
case .success:
    print("Success")
case .failure:
    print("Failure")
case .unknown:
    print("Unknown")
}
C
switch status {
default:
    print("Any")
}
D
switch status {
case .success, .failure:
    print("Known")
}
Attempts:
2 left
💡 Hint

Check if all cases are covered or if a default is used.

🚀 Application
expert
2:30remaining
How many cases must be handled in this switch?

Given this enum with associated values, how many cases must a switch handle to be exhaustive?

Swift
enum Result {
    case success(Int)
    case failure(String)
    case pending
}
A4 cases because success and failure have associated values
B2 cases: success and failure only, pending is optional
C1 case with a default to cover all
D3 cases: success, failure, and pending
Attempts:
2 left
💡 Hint

Remember each enum case counts separately regardless of associated values.

Practice

(1/5)
1. What does it mean when we say a Swift switch statement must be exhaustive?
easy
A. It must handle all possible values of the variable being switched on.
B. It can skip some cases if they are unlikely to happen.
C. It only needs to handle the first case it matches.
D. It must have at least two cases.

Solution

  1. Step 1: Understand the meaning of exhaustive switch

    In Swift, a switch must cover every possible value of the variable it checks to avoid missing cases.
  2. Step 2: Compare options to definition

    Only It must handle all possible values of the variable being switched on. states that all possible values must be handled, which matches the requirement.
  3. Final Answer:

    It must handle all possible values of the variable being switched on. -> Option A
  4. Quick Check:

    Exhaustive means all cases covered = A [OK]
Hint: Remember: switch covers all cases or uses default [OK]
Common Mistakes:
  • Thinking switch can skip cases
  • Believing only first match matters
  • Assuming minimum number of cases
2. Which of the following Swift switch statements is syntactically correct and exhaustive for an enum Direction with cases north, south, east, and west?
easy
A. switch dir { case .north: print("North") case .south: print("South") }
B. switch dir { case .north: print("North") case .south: print("South") case .east: print("East") case .west: print("West") }
C. switch dir { case .north: print("North") case .south: print("South") case .east: print("East") }
D. switch (dir) { case .north: print("North") case .south: print("South") default: print("Other") }

Solution

  1. Step 1: Check all enum cases covered

    The enum has four cases: north, south, east, west. The switch must cover all or use default.
  2. Step 2: Analyze each option

    switch dir { case .north: print("North") case .south: print("South") case .east: print("East") case .west: print("West") } covers all four cases explicitly, making it exhaustive and syntactically correct.
  3. Final Answer:

    switch with all four cases covered explicitly -> Option B
  4. Quick Check:

    All enum cases covered = D [OK]
Hint: Cover all enum cases or use default to be exhaustive [OK]
Common Mistakes:
  • Missing some enum cases
  • Not using default when cases are incomplete
  • Assuming partial cases are enough
3. What will be the output of this Swift code?
enum Mood { case happy, sad, neutral }
let todayMood = Mood.sad
switch todayMood {
 case .happy: print("Feeling great!")
 case .sad: print("Feeling down.")
 case .neutral: print("Just okay.")
}
medium
A. Feeling great!
B. Just okay.
C. Feeling down.
D. Compile error: switch not exhaustive

Solution

  1. Step 1: Identify the value of todayMood

    todayMood is set to Mood.sad.
  2. Step 2: Match the switch case

    The switch has a case for .sad that prints "Feeling down." so this case runs.
  3. Final Answer:

    Feeling down. -> Option C
  4. Quick Check:

    Value sad matches case sad = B [OK]
Hint: Match variable value to switch case to find output [OK]
Common Mistakes:
  • Confusing cases and printing wrong output
  • Thinking switch is not exhaustive here
  • Ignoring the actual value assigned
4. Identify the error in this Swift switch statement for enum Color with cases red, green, and blue:
switch color {
 case .red: print("Red")
 case .green: print("Green")
}
medium
A. Cannot use enum cases without raw values.
B. Syntax error: missing parentheses after switch.
C. No error, this switch is correct.
D. Missing case for .blue or default case, so switch is not exhaustive.

Solution

  1. Step 1: Check all enum cases handled

    The enum has three cases: red, green, blue. The switch only handles red and green.
  2. Step 2: Identify missing coverage

    Since .blue is missing and no default case is provided, the switch is not exhaustive, causing a compile error.
  3. Final Answer:

    Missing case for .blue or default case, so switch is not exhaustive. -> Option D
  4. Quick Check:

    All cases must be covered or default = C [OK]
Hint: Always cover all enum cases or add default [OK]
Common Mistakes:
  • Ignoring missing enum cases
  • Thinking parentheses needed after switch
  • Confusing raw values with case coverage
5. Given this enum and switch, how can you make the switch exhaustive without listing all cases explicitly?
enum Status { case success, failure, unknown }
let currentStatus = Status.unknown
switch currentStatus {
 case .success: print("Success")
 case .failure: print("Failure")
}
hard
A. Add a default case to handle all other values.
B. Remove the switch and use if-else instead.
C. Add a case for .unknown explicitly.
D. Change enum to have only two cases.

Solution

  1. Step 1: Understand the problem with current switch

    The switch handles .success and .failure but misses .unknown, so it's not exhaustive.
  2. Step 2: Find a way to cover missing cases without listing all explicitly

    Adding a default case covers any cases not explicitly handled, making the switch exhaustive.
  3. Final Answer:

    Add a default case to handle all other values. -> Option A
  4. Quick Check:

    Use default to cover missing cases = A [OK]
Hint: Use default to cover all unlisted cases quickly [OK]
Common Mistakes:
  • Thinking you must list every case explicitly
  • Removing switch instead of fixing it
  • Changing enum just to fix switch
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard