Raw values let you give each option in an enum a fixed, simple value like a number or a word. This helps you connect enum options to real data easily.
Raw values for enums in Swift
enum EnumName: RawValueType { case option1 = rawValue1 case option2 = rawValue2 // more cases }
The RawValueType can be Int, String, or other simple types.
Each case must have a unique raw value of the specified type.
enum Direction: String { case north = "N" case south = "S" case east = "E" case west = "W" }
enum Weekday: Int { case monday = 1 case tuesday case wednesday case thursday case friday }
This program shows how to get the raw value from an enum case and how to create an enum case from a raw value.
enum Fruit: String { case apple = "A" case banana = "B" case cherry = "C" } let favorite = Fruit.banana print("My favorite fruit raw value is \(favorite.rawValue)") if let fruitFromRaw = Fruit(rawValue: "C") { print("Fruit from raw value 'C' is \(fruitFromRaw.rawValue)") } else { print("No fruit found for that raw value") }
You can create an enum case from a raw value using the initializer EnumName(rawValue: value). It returns an optional because the raw value might not match any case.
If you don't assign raw values explicitly for Int enums, Swift assigns them starting from 0 by default.
Raw values give enum cases fixed simple values like strings or numbers.
They help convert between enum cases and data easily.
Use raw values when you want to save, compare, or display enum options clearly.
Practice
Solution
Step 1: Understand what raw values are
Raw values are fixed values assigned to enum cases, like strings or numbers.Step 2: Identify the purpose of raw values
They help convert enum cases to simple data types for saving or displaying.Final Answer:
To assign fixed simple values like strings or numbers to enum cases -> Option BQuick Check:
Raw values = fixed simple values [OK]
- Thinking raw values make enums mutable
- Confusing raw values with associated values
- Believing enums can inherit from classes
Solution
Step 1: Check enum declaration with raw values
Raw values require specifying the type after enum name, e.g., : String.Step 2: Verify correct case syntax
Cases use 'case name = value' syntax, separated by new lines or semicolons.Final Answer:
enum Direction: String { case north = "N" case south = "S" } -> Option CQuick Check:
Raw value enum syntax = enum Direction: String { case north = "N" case south = "S" } [OK]
- Omitting the raw value type after enum name
- Using commas instead of separate case lines
- Assigning raw values without specifying type
enum Weekday: Int {
case monday = 1
case tuesday
case wednesday
}
print(Weekday.tuesday.rawValue)Solution
Step 1: Understand raw value auto-increment
When the first case has a raw value (1), following cases auto-increment by 1.Step 2: Identify raw value of 'tuesday'
Since monday = 1, tuesday = 2, wednesday = 3.Final Answer:
2 -> Option DQuick Check:
Auto-increment raw values = 2 [OK]
- Assuming all raw values must be explicitly assigned
- Confusing rawValue with case index
- Expecting an error when accessing rawValue
enum Color: String {
case red = 1
case green = "Green"
case blue = "Blue"
}Solution
Step 1: Check raw value type consistency
The enum declares raw type String, so all raw values must be strings.Step 2: Identify the incorrect raw value
Case 'red' has raw value 1 (an Int), which conflicts with String type.Final Answer:
Raw values must all be of the declared type String -> Option AQuick Check:
Raw values must match enum type [OK]
- Mixing raw value types in one enum
- Thinking semicolons are required after cases
- Believing enums can't have raw values
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?Solution
Step 1: Understand rawValue initializer
StatusCode(rawValue: 404) returns .notFound; 201 returns nil.Step 2: Trace function output for each input
For 404, returns "Not Found"; for 201, returns "Unknown".Final Answer:
Not Found Unknown -> Option AQuick Check:
Raw value init maps code to enum or nil [OK]
- Assuming rawValue init always returns a case
- Confusing rawValue with case index
- Expecting runtime error for unknown raw value
Ready to prove it?
Pass the test and this pattern moves unknown
