Z
ZHANK
编程在线教程Swift 教程可选绑定与解包
可选类型

可选绑定与解包

if let/guard let 安全解包、?? 空合运算符、map/flatMap 可选链

可选绑定与解包

if let/guard let 不只解包一个值——可以同时解包多个、添加 where 条件、使用 ?? 默认值。

学完本章你将: 掌握 if let/guard let、??、可选 map/flatMap。


多重绑定

swift
let name: String? = "小明"
let age: Int? = 25

// 同时解包多个
if let name = name, let age = age {
    print("\(name), \(age)岁")
}

// 带条件
if let name = name, let age = age, age >= 18 {
    print("\(name) 已成年")
}

guard let 完整版

swift
func process(input: String?) -> String? {
    guard let input = input, !input.isEmpty else {
        print("输入无效")
        return nil
    }
    guard let number = Int(input), number > 0 else {
        print("不是正整数")
        return nil
    }
    return "处理结果: \(number * 2)"
}

?? 链式默认值

swift
let a: String? = nil
let b: String? = nil
let c: String? = "C"

let result = a ?? b ?? c ?? "默认"  // "C"

Optional 的 map / flatMap

swift
let name: String? = "小明"

// map —— 有值时转换
let upper = name.map { $0.uppercased() }  // Optional("小明")

// flatMap —— 有值时转换并展平(避免嵌套 Optional)
let valid = name.flatMap { $0.isEmpty ? nil : $0 }