可选类型 Optional
? 声明可选、nil 语义、强制解包 !、隐式解包可选
可选类型 Optional
Swift 没有 null——用 Optional 表示可能无值。 编译器强制你处理 nil 的情况——NullPointerException 成为历史。
学完本章你将: 掌握 ? 声明可选、nil 语义、强制解包 !、IUO。
可选类型
swift
var name: String? = "小明" // String? = Optional<String>
name = nil // ✅
// 非可选——不能赋 nil
var city: String = "北京"
// city = nil // ❌ 编译错误
// 默认值 vs 可选
var age: Int // 编译错误——必须初始化
var age2: Int? // ✅ 可选默认 nil
解包的四种方式
swift
let name: String? = "小明"
// 1. 强制解包 !(危险——nil 时崩溃)
print(name!) // "小明"
// let n: String? = nil; print(n!) // ❌ 崩溃
// 2. if let 安全解包
if let unwrapped = name {
print(unwrapped) // "小明"
}
// 3. guard let 提前解包
guard let unwrapped = name else { return }
print(unwrapped)
// 4. ?? 空合运算符
let display = name ?? "匿名" // "小明"
隐式解包可选(IUO)
swift
// 声明时用 ! 而不是 ?——自动解包
var definitely: String! = "一定有值"
print(definitely) // "一定有值"——不需要 ! 或 if let
// 用于"初始化时为 nil,但初始化后一定有值"的场景
// 如 Interface Builder 的 @IBOutlet