Bird
Raised Fist0
Swiftprogramming~10 mins

Enum with switch pattern matching in Swift - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Enum with switch pattern matching
Define Enum with cases
↓
Create Enum instance
↓
Switch on Enum instance
↓
Match case 1?
No→Match case 2?
↓
Execute case 1
↓
End switch
We define an enum, create an instance, then use a switch to check which case it matches and run code accordingly.
Execution Sample
Swift
enum Direction {
    case north
    case south
    case east
    case 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")
}
This code defines directions, sets one, then prints a message based on the direction using switch.
Execution Table
StepActionEnum InstanceSwitch Case CheckedMatch?Output
1Create enum instanceDirection.east---
2Switch startDirection.eastcase .northNo-
3Switch continueDirection.eastcase .southNo-
4Switch continueDirection.eastcase .eastYesGoing east
5Switch endsDirection.east---
💡 Matched case .east, switch ends after executing its block.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4Final
dirundefinedDirection.eastDirection.eastDirection.eastDirection.eastDirection.east
Key Moments - 3 Insights
Why does the switch check each case one by one?
The switch tries cases in order until it finds a match, as shown in rows 2-4 of the execution table.
What happens if no case matches?
If no case matches, the switch would run a default case if provided, but here it matches at step 4 and stops.
Why do we write cases as .north instead of Direction.north inside switch?
Inside switch on an enum instance, Swift lets us use shorthand .caseName to avoid repetition, as seen in the code sample.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the enum instance value at step 3?
ADirection.north
BDirection.east
CDirection.south
DDirection.west
💡 Hint
Check the 'Enum Instance' column at step 3 in the execution table.
At which step does the switch find a matching case?
AStep 2
BStep 3
CStep 4
DStep 5
💡 Hint
Look at the 'Match?' column to see where it says 'Yes'.
If the enum instance was Direction.west, which case would match?
Acase .west
Bcase .south
Ccase .north
Dcase .east
💡 Hint
Refer to the enum cases and how switch matches the instance value.
Concept Snapshot
enum Direction { case north, south, east, west }
let dir = Direction.east
switch dir {
 case .north: ...
 case .south: ...
 case .east: ...
 case .west: ...
}
Use switch to run code based on enum case, matching one case exactly.
Full Transcript
We start by defining an enum called Direction with four cases: north, south, east, and west. Then we create a variable dir and set it to Direction.east. Next, we use a switch statement on dir. The switch checks each case in order: first .north, then .south, then .east. When it reaches .east, it matches and prints 'Going east'. The switch then ends. If no case matched, a default case would run if provided. Inside the switch, we use shorthand .caseName instead of full enum names. This example shows how to use enums with switch pattern matching in Swift.

Practice

(1/5)
1. What is the main purpose of using an enum with associated values in Swift?
easy
A. To group related values and store extra data in each case
B. To create a class with multiple methods
C. To define a function that returns multiple values
D. To declare a variable that can only hold integers

Solution

  1. Step 1: Understand enum basics

    An enum groups related values under one type, making code organized.
  2. Step 2: Recognize associated values

    Enums with associated values can store extra data for each case, like a label or number.
  3. Final Answer:

    To group related values and store extra data in each case -> Option A
  4. Quick Check:

    Enum with associated values = group + extra data [OK]
Hint: Enums group related data with extra info easily [OK]
Common Mistakes:
  • Confusing enums with classes
  • Thinking enums only hold fixed values
  • Assuming enums are functions
2. Which of the following is the correct syntax to match an enum case with associated values using switch in Swift?
easy
A. case .someCase(let value):
B. case someCase = value:
C. case .someCase => value:
D. case someCase(value) {

Solution

  1. Step 1: Recall switch case syntax for enums

    In Swift, to match an enum case with associated values, use case .caseName(let variable):.
  2. Step 2: Identify correct pattern

    case .someCase(let value): uses the correct dot syntax and binding with let.
  3. Final Answer:

    case .someCase(let value): -> Option A
  4. Quick Check:

    Switch enum case with let binding = case .someCase(let value): [OK]
Hint: Use dot and let to bind enum associated values [OK]
Common Mistakes:
  • Missing dot before case name
  • Using = instead of :
  • Wrong arrow or braces syntax
3. What will be the output of this Swift code?
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")
}
medium
A. No output
B. Going North
C. Going West
D. Going East

Solution

  1. Step 1: Identify enum value assigned

    The variable dir is assigned Direction.east.
  2. Step 2: Match switch case

    The switch matches .east case and prints "Going East".
  3. Final Answer:

    Going East -> Option D
  4. Quick Check:

    dir = east prints "Going East" [OK]
Hint: Match enum value to switch case to find output [OK]
Common Mistakes:
  • Confusing enum case names
  • Forgetting to include all cases
  • Assuming default case runs
4. Identify the error in this Swift code using enum and switch:
enum Result {
    case success(Int)
    case failure(String)
}

let res = Result.success(10)

switch res {
case .success(let value):
    print("Value: \(value)")
case failure(let message):
    print("Error: \(message)")
}
medium
A. Switch statement missing default case
B. Wrong associated value type for 'success'
C. Missing dot before 'failure' in switch case
D. Enum cases cannot have associated values

Solution

  1. Step 1: Check switch case syntax

    In switch, enum cases must be prefixed with a dot, like .failure.
  2. Step 2: Identify missing dot

    The second case uses failure without a dot, causing a syntax error.
  3. Final Answer:

    Missing dot before 'failure' in switch case -> Option C
  4. Quick Check:

    Enum case in switch needs dot prefix [OK]
Hint: Always prefix enum cases with dot in switch [OK]
Common Mistakes:
  • Omitting dot before enum case in switch
  • Confusing associated value types
  • Forgetting to handle all cases
5. Given this enum and function, what will describeShape(.rectangle(width: 5, height: 10)) print?
enum Shape {
    case circle(radius: Double)
    case rectangle(width: Double, height: Double)
    case point
}

func describeShape(_ shape: Shape) {
    switch shape {
    case .circle(let r):
        print("Circle with radius \(r)")
    case .rectangle(let w, let h):
        print("Rectangle \(w) x \(h)")
    case .point:
        print("Just a point")
    }
}
hard
A. Circle with radius 5.0
B. Rectangle 5.0 x 10.0
C. Just a point
D. Syntax error in switch

Solution

  1. Step 1: Identify enum case and associated values

    The input is .rectangle(width: 5, height: 10), so width = 5 and height = 10.
  2. Step 2: Match switch case and print

    The switch matches .rectangle(let w, let h) and prints "Rectangle 5.0 x 10.0".
  3. Final Answer:

    Rectangle 5.0 x 10.0 -> Option B
  4. Quick Check:

    Rectangle case prints dimensions [OK]
Hint: Match enum case and extract all associated values [OK]
Common Mistakes:
  • Using wrong variable names in case
  • Missing multiple associated values in pattern
  • Assuming default case runs
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