Associated values let you store extra information with each option in an enum. This helps keep related data together in a simple way.
When you want to group different types of related data under one category.
When you need to store extra details for each choice in a list of options.
When modeling real-world things that have different properties depending on their type.
When you want to keep code organized by combining data and options in one place.
Syntax
Swift
enum EnumName {
case optionName(AssociatedType)
case anotherOption(AssociatedType1, AssociatedType2)
}
Each case can have zero or more associated values inside parentheses.
Associated values can be of any type, including multiple values separated by commas.
Examples
This enum has cases with different associated values and one without any.
Swift
enum Vehicle {
case car(make: String, year: Int)
case bicycle(brand: String)
case truck
}
Each case stores extra information about success or failure.
Swift
enum Result {
case success(data: String)
case failure(errorCode: Int)
}
Sample Program
This program defines a Beverage enum with associated values. It creates a coffee with size and sugar info, then prints those details using a switch.
Swift
enum Beverage {
case coffee(size: String, sugar: Bool)
case tea(flavor: String)
case water
}
let myDrink = Beverage.coffee(size: "Large", sugar: true)
switch myDrink {
case .coffee(let size, let sugar):
print("Coffee size: \(size), sugar added: \(sugar)")
case .tea(let flavor):
print("Tea flavor: \(flavor)")
case .water:
print("Just water")
}
OutputSuccess
Important Notes
You access associated values by matching them in a switch or using if case let.
Associated values are different from raw values; they store data per instance, not fixed constants.
Summary
Associated values let enum cases carry extra data.
They help model complex data clearly and safely.
Use switch statements to extract and use associated values.
Practice
(1/5)
1. What is the main purpose of associated values in Swift enums?
easy
A. To store extra data with each enum case
B. To define multiple enums in one declaration
C. To create functions inside enums
D. To inherit properties from other enums
Solution
Step 1: Understand enum cases
Enum cases represent fixed options, but sometimes need extra data.
Step 2: Role of associated values
Associated values let each case carry extra information, like a label or number.
Final Answer:
To store extra data with each enum case -> Option A
Quick Check:
Associated values = extra data per case [OK]
Hint: Think: extra info stored inside enum cases [OK]
Common Mistakes:
Confusing associated values with raw values
Thinking enums can inherit properties
Believing enums can contain functions only
2. Which of the following is the correct syntax to define an enum case with an associated value of type String?
easy
A. case name -> String
B. case name(String)
C. case name: String
D. case name = String
Solution
Step 1: Recall enum case syntax with associated values
Associated values use parentheses after the case name with the type inside.
Step 2: Match syntax options
Only 'case name(String)' uses parentheses correctly for associated values.
Final Answer:
case name(String) -> Option B
Quick Check:
Parentheses hold associated value type [OK]
Hint: Use parentheses for associated value types [OK]
Common Mistakes:
Using colon instead of parentheses
Using equals sign for associated values
Using arrow notation incorrectly
3. What will be the output of this Swift code?
enum Result {
case success(String)
case failure(Int)
}
let response = Result.success("Done")
switch response {
case .success(let message):
print(message)
case .failure(let code):
print("Error code: \(code)")
}
medium
A. Error code: Done
B. Compilation error
C. Error code: 0
D. Done
Solution
Step 1: Identify enum case used
The variable 'response' is assigned 'Result.success("Done")'.
Step 2: Switch matches .success case
The switch matches '.success(let message)' and prints the message string.
Final Answer:
Done -> Option D
Quick Check:
Matching case prints associated string [OK]
Hint: Match enum case to print its associated value [OK]
Common Mistakes:
Confusing success and failure cases
Expecting error code instead of message
Thinking code will not compile
4. Identify the error in this Swift enum usage:
enum Device {
case phone(model: String)
case tablet(model: String)
}
let myDevice = Device.phone("iPhone")
medium
A. Missing parentheses around associated value
B. Enum cases cannot have associated values
C. Cannot assign associated value without label
D. Incorrect enum declaration syntax
Solution
Step 1: Check enum case declaration
Cases use labeled associated values: 'phone(model: String)'.
Step 2: Check enum instance assignment
Assigning 'Device.phone("iPhone")' omits the label 'model:'.
Final Answer:
Cannot assign associated value without label -> Option C
Quick Check:
Labeled associated values require labels on assignment [OK]
Hint: Use labels when enum cases define labeled associated values [OK]
Common Mistakes:
Ignoring labels in associated values
Thinking parentheses are missing
Believing enums can't have associated values
5. Given this enum with multiple associated values:
enum Message {
case text(String, Int)
case image(url: String, size: (width: Int, height: Int))
}
let msg = Message.image(url: "photo.png", size: (width: 100, height: 200))
switch msg {
case .text(let content, let length):
print("Text: \(content), length: \(length)")
case .image(let url, let size):
print("Image URL: \(url), size: \(size.width)x\(size.height)")
}
What will be printed?
hard
A. Image URL: photo.png, size: 100x200
B. Text: photo.png, length: 100
C. Image URL: photo.png, size: (100, 200)
D. Compilation error due to tuple
Solution
Step 1: Identify enum case and associated values
Variable 'msg' is assigned '.image' with url and size tuple.
Step 2: Switch matches .image case and prints values
Print statement accesses url and tuple's width and height correctly.
Final Answer:
Image URL: photo.png, size: 100x200 -> Option A
Quick Check:
Tuple values accessed with dot notation [OK]
Hint: Access tuple parts with dot notation inside switch [OK]
Common Mistakes:
Printing tuple as whole instead of parts
Confusing .text and .image cases
Expecting compilation error from tuple
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.