📖 Scenario: Imagine you are building a simple app that tracks the status of tasks. Each task can be in one of several states like not started, in progress, or completed. Using enums in Swift helps you manage these states clearly and safely.
🎯 Goal: You will create an enum to represent task states, add a variable to hold the current state, write a function to describe the state, and finally print the description. This shows how enums make your code easier to read and less error-prone.
📋 What You'll Learn
Create an enum called TaskState with cases notStarted, inProgress, and completed
Create a variable called currentState of type TaskState and set it to .notStarted
Write a function called describeState that takes a TaskState parameter and returns a String description
Use a switch statement inside describeState to return different messages for each case
Print the description of currentState by calling describeState
💡 Why This Matters
🌍 Real World
Enums are used in apps to represent fixed sets of options like states, modes, or categories. This helps keep code organized and reduces bugs.
💼 Career
Understanding enums is important for Swift developers because they are widely used in iOS and macOS app development to write clean, safe, and maintainable code.
Progress0 / 4 steps
1
Create the enum for task states
Create an enum called TaskState with these exact cases: notStarted, inProgress, and completed
Swift
Hint
Use the enum keyword followed by the name TaskState. Then list the cases inside curly braces.
2
Create a variable for the current state
Create a variable called currentState of type TaskState and set it to .notStarted
Swift
Hint
Declare currentState with var, specify the type TaskState, and assign .notStarted.
3
Write a function to describe the state
Write a function called describeState that takes a parameter state of type TaskState and returns a String. Use a switch statement on state to return these exact strings: "Task not started yet." for .notStarted, "Task is in progress." for .inProgress, and "Task completed!" for .completed
Swift
Hint
Define the function with the correct parameter and return type. Use a switch on state to return the exact strings for each case.
4
Print the description of the current state
Write a print statement that calls describeState with currentState and prints the returned string
Swift
Hint
Call describeState with currentState inside print to show the message.
Practice
(1/5)
1. What is one main reason enums are powerful in Swift?
easy
A. They group related values clearly and safely.
B. They allow any type of value without restrictions.
C. They automatically generate user interfaces.
D. They replace all classes and structs.
Solution
Step 1: Understand enum purpose
Enums group related values into a clear set, making code safer and easier to read.
Step 2: Compare options
Options A, B, and C describe features not true for enums. Only They group related values clearly and safely. correctly states their main power.
Final Answer:
They group related values clearly and safely. -> Option A
Quick Check:
Enums group related values = D [OK]
Hint: Enums group related values safely and clearly [OK]
Common Mistakes:
Thinking enums allow any value type without limits
Confusing enums with UI components
Believing enums replace classes and structs
2. Which of the following is the correct syntax to define an enum in Swift?
easy
A. enum Direction: String { north, south, east, west }
B. enum Direction = { north, south, east, west }
C. enum Direction { north; south; east; west }
D. enum Direction { case north, south, east, west }
Solution
Step 1: Recall enum syntax
In Swift, enums use the keyword 'enum' followed by cases declared with 'case' keyword separated by commas.
Step 2: Check each option
enum Direction { case north, south, east, west } uses correct syntax. enum Direction = { north, south, east, west } uses '=' which is invalid. enum Direction: String { north, south, east, west } misses 'case' keyword. enum Direction { north; south; east; west } uses semicolons incorrectly.
Final Answer:
enum Direction { case north, south, east, west } -> Option D
Quick Check:
Correct enum syntax uses 'case' keyword = C [OK]
Hint: Remember enum cases start with 'case' keyword [OK]
Common Mistakes:
Using '=' instead of '{ }' for enum body
Omitting 'case' keyword before cases
Separating cases with semicolons instead of commas
3. What will be the output of this Swift code?
enum Result {
case success(String)
case failure(String)
}
let outcome = Result.success("Done")
switch outcome {
case .success(let message):
print("Success: \(message)")
case .failure(let error):
print("Failure: \(error)")
}
medium
A. Success: error
B. Failure: Done
C. Success: Done
D. Compilation error
Solution
Step 1: Understand enum with associated values
The enum Result has two cases with associated String values. The variable 'outcome' is assigned .success("Done").
Step 2: Analyze switch statement
The switch matches .success case, extracts 'message' as "Done", and prints "Success: Done".
Final Answer:
Success: Done -> Option C
Quick Check:
Matching .success prints message = A [OK]
Hint: Match enum cases with associated values carefully [OK]
Common Mistakes:
Confusing success and failure cases
Forgetting to extract associated values
Expecting compilation error due to associated values
4. Identify the error in this Swift enum code:
enum Status {
case ready
case waiting
case error(String)
}
let current = Status.error
print(current)
medium
A. Enum cases cannot have associated values.
B. Missing associated value for 'error' case.
C. Cannot print enum values directly.
D. Enum must have raw values.
Solution
Step 1: Check enum definition
The 'error' case requires a String associated value, but 'current' is assigned without one.
Step 2: Understand assignment error
Assigning 'Status.error' without a String causes a compile-time error because associated values are mandatory.
Final Answer:
Missing associated value for 'error' case. -> Option B
Quick Check:
Associated values must be provided = A [OK]
Hint: Provide associated values when required by enum case [OK]
Common Mistakes:
Assigning enum case with associated value without value
Thinking enums cannot have associated values
Assuming printing enum directly causes error
5. Given this enum with associated values, how can you extract the associated String from a variable of type Response?
enum Response {
case data(String)
case error(Int, String)
}
let reply = Response.error(404, "Not Found")
Which code snippet correctly extracts the error message?
hard
A. if case let .error(code, message) = reply { print(message) }
B. if reply == .error { print("Error") }
C. switch reply { case .data(let msg): print(msg) default: break }
D. let message = reply.errorMessage
Solution
Step 1: Understand enum with multiple associated values
The 'error' case has two associated values: an Int and a String. To get the message, both must be extracted.
Step 2: Analyze extraction methods
if case let .error(code, message) = reply { print(message) } uses pattern matching with 'if case let' to extract both values and print the message. Options A, C, and D are invalid syntax or incomplete.
Final Answer:
if case let .error(code, message) = reply { print(message) } -> Option A
Quick Check:
Pattern match to extract associated values = B [OK]
Hint: Use 'if case let' to extract associated values from enums [OK]
Common Mistakes:
Trying to compare enum with associated values directly
Ignoring associated values in switch or if
Assuming enum has properties like 'errorMessage'
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.