📖 Scenario: You are building a simple user profile display system. Sometimes, some user information might be missing (nil). You want to use the nil coalescing operator to provide default values in a clean and readable way.
🎯 Goal: Learn how to use the nil coalescing operator ?? deeply in Swift to handle optional values and provide fallback defaults.
📋 What You'll Learn
Create a dictionary called userProfile with optional values for keys "name", "age", and "city".
Create a constant called defaultCity with the value "Unknown City".
Use the nil coalescing operator ?? to create a constant displayCity that uses userProfile["city"] or falls back to defaultCity.
Print the displayCity value.
💡 Why This Matters
🌍 Real World
Handling missing or optional data is common in apps that get data from the internet or user input. Using the nil coalescing operator helps keep code clean and safe.
💼 Career
Swift developers often work with optionals. Mastering nil coalescing is essential for writing robust iOS apps that handle missing data gracefully.
Progress0 / 4 steps
1
Create the user profile dictionary
Create a dictionary called userProfile with these exact entries: "name": "Alice", "age": nil, and "city": nil. Use type [String: String?].
Swift
Hint
Use a dictionary with optional String values. Assign nil to age and city.
2
Create the default city constant
Create a constant called defaultCity and set it to the string "Unknown City".
Swift
Hint
Use let to create a constant string.
3
Use nil coalescing operator to get display city
Create a constant called displayCity that uses the nil coalescing operator ?? to get userProfile["city"] or fall back to defaultCity. Since userProfile["city"] is an optional optional (String??), unwrap it safely using ?? twice.
Swift
Hint
Remember that userProfile["city"] returns String??. Use ?? twice to unwrap.
4
Print the display city
Write a print statement to display the value of displayCity.
Swift
Hint
Use print(displayCity) to show the result.
Practice
(1/5)
1. What does the nil coalescing operator ?? do in Swift?
easy
A. It returns the value of an optional if it is not nil, otherwise returns a default value.
B. It forces unwraps an optional and crashes if nil.
C. It converts a non-optional value into an optional.
D. It checks if two optionals are equal.
Solution
Step 1: Understand the purpose of the nil coalescing operator
The operator ?? is used to provide a default value when an optional is nil.
Step 2: Compare with other options
Options A, C, and D describe different behaviors unrelated to ??.
Final Answer:
It returns the value of an optional if it is not nil, otherwise returns a default value. -> Option A
Quick Check:
Nil coalescing operator = default value fallback [OK]
Hint: Remember: ?? means "use this if nil" [OK]
Common Mistakes:
Confusing ?? with forced unwrapping (!)
Thinking ?? converts types
Assuming ?? compares optionals
2. Which of the following is the correct syntax to use the nil coalescing operator in Swift?
easy
A. let value = optionalValue ??? defaultValue
B. let value = optionalValue ?: defaultValue
C. let value = optionalValue ? defaultValue
D. let value = optionalValue ?? defaultValue
Solution
Step 1: Recall the correct syntax for nil coalescing
The correct syntax uses two question marks: ?? between the optional and the default value.
Step 2: Eliminate incorrect options
Options B, C, and D use invalid or incorrect operators.
Final Answer:
let value = optionalValue ?? defaultValue -> Option D
Quick Check:
Syntax for nil coalescing = ?? [OK]
Hint: Look for exactly two question marks ?? [OK]
Common Mistakes:
Using ?: which is from other languages
Using single ? instead of ??
Adding extra question marks ???
3. What is the output of the following Swift code?
let a: Int? = nil
let b: Int? = 5
let c: Int? = nil
let result = a ?? b ?? c ?? 10
print(result)
medium
A. 5
B. 10
C. nil
D. Compilation error
Solution
Step 1: Evaluate the chained nil coalescing
The expression a ?? b ?? c ?? 10 checks each optional from left to right and returns the first non-nil value.
Step 2: Check each optional's value
a is nil, so move to b which is 5 (non-nil), so the result is 5.
Final Answer:
5 -> Option A
Quick Check:
First non-nil value = 5 [OK]
Hint: Chain ?? to pick first non-nil value [OK]
Common Mistakes:
Assuming nil is returned if first is nil
Ignoring chaining order
Thinking default 10 is always returned
4. Identify the error in this Swift code using nil coalescing:
let x: Int? = nil
let y: Int = 3
let z = x ?? y ?? 5
print(z)
medium
A. x must be non-optional
B. No error, code runs fine
C. y must be optional to use ??
D. Cannot use ?? with non-optional y
Solution
Step 1: Understand the types involved in nil coalescing
The operator ?? requires the right side to be the same type as the optional or a non-optional fallback value.
Step 2: Analyze the expression x ?? y ?? 5
Here, x is Int?, y is Int, but y ?? 5 is invalid because y is not optional, so you cannot use ?? on it.
Final Answer:
Cannot use ?? with non-optional y -> Cannot use ?? with non-optional y
Quick Check:
Right side of ?? must be optional or value [OK]
Hint: Right side of ?? must be optional or value, not non-optional with ?? [OK]
Common Mistakes:
Using ?? on non-optional values
Confusing optional and non-optional types
Assuming ?? works like || operator
5. Given the following Swift code, what will be the value of finalValue?
func getValue() -> Int? { return nil }
let a: Int? = nil
let b: Int? = getValue()
let c: Int? = 7
let finalValue = a ?? b ?? c ?? 0
hard
A. nil
B. 0
C. 7
D. Compilation error
Solution
Step 1: Evaluate each optional in the chain
a is nil, b is nil (from getValue()), c is 7 (non-nil).
Step 2: Apply nil coalescing operator
The expression a ?? b ?? c ?? 0 returns the first non-nil value, which is 7.
Final Answer:
7 -> Option C
Quick Check:
First non-nil in chain = 7 [OK]
Hint: Chain ?? to find first non-nil, else default [OK]
Common Mistakes:
Assuming function return nil means error
Ignoring that c is non-nil
Thinking default 0 is returned always
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.