Generics
Generic Optionals
Generic helpers can work with optional values without knowing their concrete type ahead of time.
Replace nil with a default
generic_optionals.swift
Replay: real traced execution (multi-file project)
func valueOrDefault<T>(_ value: T?, fallback: T) -> T {
return value ?? fallback
}
let hasNickname = true
let nickname = hasNickname ? "Ada" : nil
let display = valueOrDefault(nickname, fallback: "guest")
let message = "name=\(display)"
print(message)
func valueOrDefault<T>(_ value: T?, fallback: T) -> T {
return value ?? fallback
}
let hasNickname = false
let nickname = hasNickname ? "Ada" : nil
let display = valueOrDefault(nickname, fallback: "guest")
let message = "name=\(display)"
print(message)
hasNickname ← true, nickname ← Optional("Ada")
5let hasNickname→ true = true //@hasNickname=false6let nickname→ Optional("Ada") = hasNicknametrue ? "Ada" : nil7let display = valueOrDefault(nicknameOptional("Ada"), fallback: "guest")8let message = "name=\(display)"func valueOrDefault<T>(_ value: T?, fallback: T) -> T
1func valueOrDefault<T>(_ valueOptional("Ada"): T?, fallbackguest: T) -> T {2 return valueOptional("Ada") ?? fallbackguest3}display ← Ada, message ← name=Ada
6let nickname = hasNickname ? "Ada" : nil7let display→ Ada = valueOrDefault(nicknameOptional("Ada"), fallback: "guest")8let message→ name=Ada = "name=\(displayAda)"910print(messagename=Ada)outputname=Ada
hasNickname ← false, nickname ← nil
5let hasNickname→ false = false6let nickname→ nil = hasNicknamefalse ? "Ada" : nil7let display = valueOrDefault(nicknamenil, fallback: "guest")8let message = "name=\(display)"func valueOrDefault<T>(_ value: T?, fallback: T) -> T
1func valueOrDefault<T>(_ valuenil: T?, fallbackguest: T) -> T {2 return valuenil ?? fallbackguest3}display ← guest, message ← name=guest
6let nickname = hasNickname ? "Ada" : nil7let display→ guest = valueOrDefault(nicknamenil, fallback: "guest")8let message→ name=guest = "name=\(displayguest)"910print(messagename=guest)outputname=guest
optional generic
A generic optional helper can express fallback behavior once and keep the returned type precise.