An optional can hold a value or hold nil when no value is available.

Store a value or nil

nickname
optional_values.swift
Replay: real traced execution (multi-file project)
let nickname: String? = "Mina"
let hasNickname = nickname != nil
let display = String(describing: nickname)

print("hasNickname=\(hasNickname)")
print("display=\(display)")
let nickname: String? = nil
let hasNickname = nickname != nil
let display = String(describing: nickname)

print("hasNickname=\(hasNickname)")
print("display=\(display)")
let nickname: String? = "Kai"
let hasNickname = nickname != nil
let display = String(describing: nickname)

print("hasNickname=\(hasNickname)")
print("display=\(display)")
  1. nickname ← Optional("Mina"), hasNickname ← true, display ← Optional("Mina")

    1let nickname→ Optional("Mina"): String? = "Mina"  //@nickname=nil, "Kai"2let hasNickname→ true = nicknameOptional("Mina") != nil3let display→ Optional("Mina") = String(describing: nicknameOptional("Mina"))45print("hasNickname=\(hasNicknametrue)")6print("display=\(displayOptional("Mina"))")
    outputhasNickname=true
    display=Optional("Mina")
  1. nickname ← nil, hasNickname ← false, display ← nil

    1let nickname→ nil: String? = nil2let hasNickname→ false = nicknamenil != nil3let display→ nil = String(describing: nicknamenil)45print("hasNickname=\(hasNicknamefalse)")6print("display=\(displaynil)")
    outputhasNickname=false
    display=nil
  1. nickname ← Optional("Kai"), hasNickname ← true, display ← Optional("Kai")

    1let nickname→ Optional("Kai"): String? = "Kai"2let hasNickname→ true = nicknameOptional("Kai") != nil3let display→ Optional("Kai") = String(describing: nicknameOptional("Kai"))45print("hasNickname=\(hasNicknametrue)")6print("display=\(displayOptional("Kai"))")
    outputhasNickname=true
    display=Optional("Kai")
optionals Use an optional type such as `String?` when a variable may have no value. Compare with `nil` before relying on the value.