Bird
Raised Fist0
Swiftprogramming~10 mins

Nil coalescing operator (??) in Swift - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Nil coalescing operator (??)
Optional value
→Is it nil?
Yes↓
Use default value
The nil coalescing operator checks if an optional has a value; if yes, it uses that value, otherwise it uses a default.
Execution Sample
Swift
let name: String? = nil
let displayName = name ?? "Guest"
print(displayName)
This code uses ?? to provide "Guest" if name is nil, then prints the result.
Execution Table
StepVariableValueConditionActionOutput
1namenilname == nilUse default "Guest""Guest"
2displayName"Guest"-Assign displayName = "Guest"-
3---Print displayNameGuest
💡 Execution ends after printing displayName.
Variable Tracker
VariableStartAfter Step 1After Step 2Final
namenilnilnilnil
displayNameundefinedundefined"Guest""Guest"
Key Moments - 2 Insights
Why does displayName get "Guest" instead of nil?
Because name is nil (see execution_table step 1), the ?? operator uses the default "Guest" value.
What if name had a value instead of nil?
Then the ?? operator would use that value directly, skipping the default (not shown here but implied).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table step 1, what is the value of 'name'?
Anil
B"Guest"
Cundefined
D"name"
💡 Hint
Check the 'Value' column for 'name' at step 1 in execution_table.
At which step is displayName assigned a value?
AStep 1
BStep 3
CStep 2
DNever assigned
💡 Hint
Look at the 'Action' column in execution_table for displayName assignment.
If name was "Alice" instead of nil, what would displayName be after step 2?
Anil
B"Alice"
C"Guest"
Dundefined
💡 Hint
Recall how ?? uses the optional value if not nil, see concept_flow.
Concept Snapshot
Syntax: optionalValue ?? defaultValue

Behavior: Returns optionalValue if not nil; otherwise returns defaultValue.

Use to provide fallback values for optionals.

Example: let x = name ?? "Guest"

Simple and safe way to handle nil optionals.
Full Transcript
The nil coalescing operator (??) in Swift checks if an optional value is nil. If the optional has a value, it uses that value. If it is nil, it uses a default value provided after the operator. For example, if name is nil, name ?? "Guest" results in "Guest". This operator helps avoid writing longer if-else code to unwrap optionals safely. In the example code, name is nil, so displayName becomes "Guest" and that is printed. If name had a value like "Alice", displayName would be "Alice" instead. This operator is a simple way to provide fallback values for optionals.

Practice

(1/5)
1. What does the nil coalescing operator ?? do in Swift?
easy
A. It unwraps an optional without checking for nil.
B. It provides a default value if an optional is nil.
C. It converts a non-optional to an optional.
D. It forces a runtime error if the optional is nil.

Solution

  1. Step 1: Understand optional values

    Optionals may contain a value or nil (no value).
  2. Step 2: Role of nil coalescing operator

    The operator ?? returns the optional's value if it exists; otherwise, it returns the default value provided.
  3. Final Answer:

    It provides a default value if an optional is nil. -> Option B
  4. Quick Check:

    Nil coalescing = default value if nil [OK]
Hint: Remember: ?? means "use this if nil" [OK]
Common Mistakes:
  • Thinking ?? unwraps without nil check
  • Confusing ?? with forced unwrapping (!)
  • Assuming ?? converts types
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

  1. Step 1: Recall the syntax of nil coalescing

    The nil coalescing operator is written as ?? between an optional and a default value.
  2. Step 2: Match correct syntax

    let value = optionalValue ?? defaultValue uses ?? correctly: let value = optionalValue ?? defaultValue.
  3. Final Answer:

    let value = optionalValue ?? defaultValue -> Option D
  4. Quick Check:

    Correct syntax uses ?? [OK]
Hint: Look for double question marks ?? in syntax [OK]
Common Mistakes:
  • Using ?: which is from other languages
  • Using single ? without ??
  • Using !! which is invalid
3. What will be the output of the following Swift code?
var name: String? = nil
let displayName = name ?? "Guest"
print(displayName)
medium
A. Guest
B. Optional("Guest")
C. nil
D. Error: Cannot print optional

Solution

  1. Step 1: Check the optional value

    The variable name is nil.
  2. Step 2: Apply nil coalescing operator

    The expression name ?? "Guest" returns "Guest" because name is nil.
  3. Final Answer:

    Guest -> Option A
  4. Quick Check:

    nil ?? "Guest" = "Guest" [OK]
Hint: If optional is nil, ?? returns the default value [OK]
Common Mistakes:
  • Expecting nil to print
  • Thinking print shows Optional(...)
  • Confusing ?? with forced unwrap
4. Identify the error in this Swift code snippet using the nil coalescing operator:
let age: Int? = 25
let userAge = age ??
print(userAge)
medium
A. Optional variable cannot be used with ??
B. print statement syntax is incorrect
C. Missing default value after ?? operator
D. age should not be optional

Solution

  1. Step 1: Check nil coalescing usage

    The operator ?? must be followed by a default value to use if the optional is nil.
  2. Step 2: Identify missing default value

    In the code, age ?? is incomplete because no default value is provided after ??.
  3. Final Answer:

    Missing default value after ?? operator -> Option C
  4. Quick Check:

    ?? needs a value after it [OK]
Hint: Always provide a value after ?? [OK]
Common Mistakes:
  • Leaving ?? without default value
  • Thinking optional can't be used with ??
  • Misplacing print statement
5. Given the dictionary let scores: [String: Int?] = ["Alice": 85, "Bob": nil], which expression correctly uses the nil coalescing operator to get Bob's score or 0 if nil?
hard
A. let bobScore = scores["Bob"] ?? nil ?? 0
B. let bobScore = scores["Bob"]! ?? 0
C. let bobScore = scores["Bob"] ?? Optional(0)
D. let bobScore = scores["Bob"] ?? 0

Solution

  1. Step 1: Understand dictionary value type

    The dictionary stores optional Int values: Int? inside the dictionary optional lookup, so scores["Bob"] returns Int??.
  2. Step 2: Use nil coalescing correctly

    Chaining scores["Bob"] ?? nil ?? 0 first flattens the double optional to Int? (returns inner value or nil), then applies ?? 0 to provide 0 if nil, yielding Int. For "Bob", some(nil) ?? nil = nil, then nil ?? 0 = 0.
  3. Final Answer:

    let bobScore = scores["Bob"] ?? nil ?? 0 -> Option A
  4. Quick Check:

    ?? nil ?? 0 handles [Key: Opt<V>] [OK]
Hint: Chain ?? nil ?? 0 for dict of optionals [OK]
Common Mistakes:
  • Forcing unwrap before ?? causing crash
  • Direct ?? 0 causes type mismatch
  • Optional(0) doesn't handle inner nil
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