Z
ZHANK
编程在线教程Swift 教程可选类型 Optional
可选类型

可选类型 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