Bird
Raised Fist0
Swiftprogramming~10 mins

Raw values for enums in Swift - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Raw values for enums
Define enum with raw values
↓
Access raw value of case
↓
Use raw value to create enum case
↓
Handle optional enum from raw value
↓
End
This flow shows how to define an enum with raw values, access those values, create enum cases from raw values, and handle optional results.
Execution Sample
Swift
enum Direction: String {
    case north = "N"
    case south = "S"
    case east = "E"
    case west = "W"
}

let dir = Direction.north
print(dir.rawValue)

let fromRaw = Direction(rawValue: "E")
print(fromRaw)
Defines an enum Direction with String raw values, prints the raw value of north, and creates an enum case from a raw value.
Execution Table
StepActionEvaluationResult
1Define enum Direction with raw valuesN/AEnum Direction created with cases north="N", south="S", east="E", west="W"
2Assign dir = Direction.northdir = Direction.northdir holds case north
3Print dir.rawValuedir.rawValue"N"
4Create fromRaw = Direction(rawValue: "E")Direction(rawValue: "E")Optional(Direction.east)
5Print fromRawfromRawOptional(Direction.east)
💡 All steps complete; raw values accessed and enum created from raw value successfully.
Variable Tracker
VariableStartAfter Step 2After Step 4Final
dirnilDirection.northDirection.northDirection.north
fromRawnilnilOptional(Direction.east)Optional(Direction.east)
Key Moments - 3 Insights
Why is fromRaw an Optional?
Because Direction(rawValue:) initializer returns an Optional in case the raw value does not match any case, as shown in step 4 of the execution_table.
Can raw values be of any type?
No, raw values must be of a literal type like String, Int, or Float, as shown by the String raw values in the enum definition in step 1.
Does accessing rawValue change the enum case?
No, accessing rawValue only reads the associated raw value without changing the enum case, as shown in step 3.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of dir.rawValue at step 3?
A"E"
B"N"
COptional(Direction.north)
Dnil
💡 Hint
Refer to step 3 in execution_table where dir.rawValue is printed.
At which step does fromRaw get assigned an Optional enum case?
AStep 4
BStep 3
CStep 2
DStep 5
💡 Hint
Check step 4 in execution_table where fromRaw is created from rawValue.
If you try Direction(rawValue: "X"), what would fromRaw be?
AOptional(Direction.north)
BOptional(Direction.east)
Cnil
DCrash
💡 Hint
Recall from key_moments that rawValue initializer returns Optional and fails safely if no match.
Concept Snapshot
enum Direction: String { case north = "N", south = "S" }
Access raw value: dir.rawValue
Create from raw: Direction(rawValue: "N") -> Optional
Raw values must be literal types
Raw value init returns Optional if no match
Full Transcript
This example shows how to define an enum with raw values in Swift. The enum Direction has cases with String raw values like "N" for north. We assign dir to Direction.north and print its rawValue, which outputs "N". Then we create fromRaw using Direction(rawValue: "E"), which returns an Optional containing Direction.east. The rawValue initializer returns Optional because the raw value might not match any case. Raw values must be literal types such as String or Int. Accessing rawValue does not change the enum case. This helps safely convert between raw values and enum cases.

Practice

(1/5)
1. What is the purpose of raw values in Swift enums?
easy
A. To allow enums to inherit from classes
B. To assign fixed simple values like strings or numbers to enum cases
C. To make enums mutable after declaration
D. To create functions inside enums

Solution

  1. Step 1: Understand what raw values are

    Raw values are fixed values assigned to enum cases, like strings or numbers.
  2. Step 2: Identify the purpose of raw values

    They help convert enum cases to simple data types for saving or displaying.
  3. Final Answer:

    To assign fixed simple values like strings or numbers to enum cases -> Option B
  4. Quick Check:

    Raw values = fixed simple values [OK]
Hint: Raw values give enums fixed simple data like strings or numbers [OK]
Common Mistakes:
  • Thinking raw values make enums mutable
  • Confusing raw values with associated values
  • Believing enums can inherit from classes
2. Which of the following is the correct syntax to declare an enum with raw values in Swift?
easy
A. enum Direction: Int { case north; case south }
B. enum Direction { case north = "N" case south = "S" }
C. enum Direction: String { case north = "N" case south = "S" }
D. enum Direction: String { north = "N", south = "S" }

Solution

  1. Step 1: Check enum declaration with raw values

    Raw values require specifying the type after enum name, e.g., : String.
  2. Step 2: Verify correct case syntax

    Cases use 'case name = value' syntax, separated by new lines or semicolons.
  3. Final Answer:

    enum Direction: String { case north = "N" case south = "S" } -> Option C
  4. Quick Check:

    Raw value enum syntax = enum Direction: String { case north = "N" case south = "S" } [OK]
Hint: Raw value enums need type after name and '=' for values [OK]
Common Mistakes:
  • Omitting the raw value type after enum name
  • Using commas instead of separate case lines
  • Assigning raw values without specifying type
3. What will be the output of this Swift code?
enum Weekday: Int {
    case monday = 1
    case tuesday
    case wednesday
}
print(Weekday.tuesday.rawValue)
medium
A. 1
B. Error: rawValue not found
C. 3
D. 2

Solution

  1. Step 1: Understand raw value auto-increment

    When the first case has a raw value (1), following cases auto-increment by 1.
  2. Step 2: Identify raw value of 'tuesday'

    Since monday = 1, tuesday = 2, wednesday = 3.
  3. Final Answer:

    2 -> Option D
  4. Quick Check:

    Auto-increment raw values = 2 [OK]
Hint: Raw Int values auto-increment from first assigned value [OK]
Common Mistakes:
  • Assuming all raw values must be explicitly assigned
  • Confusing rawValue with case index
  • Expecting an error when accessing rawValue
4. Identify the error in this enum declaration:
enum Color: String {
    case red = 1
    case green = "Green"
    case blue = "Blue"
}
medium
A. Raw values must all be of the declared type String
B. Enum cases cannot have raw values
C. Raw values must be integers only
D. Missing semicolon after each case

Solution

  1. Step 1: Check raw value type consistency

    The enum declares raw type String, so all raw values must be strings.
  2. Step 2: Identify the incorrect raw value

    Case 'red' has raw value 1 (an Int), which conflicts with String type.
  3. Final Answer:

    Raw values must all be of the declared type String -> Option A
  4. Quick Check:

    Raw values must match enum type [OK]
Hint: All raw values must match enum's declared raw type [OK]
Common Mistakes:
  • Mixing raw value types in one enum
  • Thinking semicolons are required after cases
  • Believing enums can't have raw values
5. Given this enum:
enum StatusCode: Int {
    case success = 200
    case notFound = 404
    case serverError = 500
}

func message(for code: Int) -> String {
    if let status = StatusCode(rawValue: code) {
        switch status {
        case .success: return "OK"
        case .notFound: return "Not Found"
        case .serverError: return "Server Error"
        }
    } else {
        return "Unknown"
    }
}

print(message(for: 404))
print(message(for: 201))
What is the output?
hard
A. Not Found Unknown
B. OK Unknown
C. Not Found Server Error
D. Error at runtime

Solution

  1. Step 1: Understand rawValue initializer

    StatusCode(rawValue: 404) returns .notFound; 201 returns nil.
  2. Step 2: Trace function output for each input

    For 404, returns "Not Found"; for 201, returns "Unknown".
  3. Final Answer:

    Not Found Unknown -> Option A
  4. Quick Check:

    Raw value init maps code to enum or nil [OK]
Hint: Raw value init returns nil if no matching case [OK]
Common Mistakes:
  • Assuming rawValue init always returns a case
  • Confusing rawValue with case index
  • Expecting runtime error for unknown raw value
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