The ?? operator provides a fallback value when an optional is nil.

Choose a fallback

preferredName
nil_coalescing.swift
Replay: real traced execution (multi-file project)
let preferredName: String? = nil
let fallbackName = "Guest"
let displayName = preferredName ?? fallbackName

print("displayName=\(displayName)")
let preferredName: String? = "Ari"
let fallbackName = "Guest"
let displayName = preferredName ?? fallbackName

print("displayName=\(displayName)")
let preferredName: String? = "Lee"
let fallbackName = "Guest"
let displayName = preferredName ?? fallbackName

print("displayName=\(displayName)")
  1. preferredName ← nil, fallbackName ← Guest, displayName ← Guest

    1let preferredName→ nil: String? = nil  //@preferredName="Ari", "Lee"2let fallbackName→ Guest = "Guest"3let displayName→ Guest = preferredNamenil ?? fallbackNameGuest45print("displayName=\(displayNameGuest)")
    outputdisplayName=Guest
  1. preferredName ← Optional("Ari"), fallbackName ← Guest, displayName ← Ari

    1let preferredName→ Optional("Ari"): String? = "Ari"2let fallbackName→ Guest = "Guest"3let displayName→ Ari = preferredNameOptional("Ari") ?? fallbackNameGuest45print("displayName=\(displayNameAri)")
    outputdisplayName=Ari
  1. preferredName ← Optional("Lee"), fallbackName ← Guest, displayName ← Lee

    1let preferredName→ Optional("Lee"): String? = "Lee"2let fallbackName→ Guest = "Guest"3let displayName→ Lee = preferredNameOptional("Lee") ?? fallbackNameGuest45print("displayName=\(displayNameLee)")
    outputdisplayName=Lee
fallback Nil coalescing keeps fallback logic compact. If the optional has a value, Swift uses it; otherwise Swift uses the value on the right side of `??`.