Swift 基础知识体系概览
为什么要深入学习 Swift?
Swift 是 Apple 平台的主力开发语言,也是 iOS 面试的核心考察领域。从值类型与引用类型的设计哲学,到 Protocol-Oriented Programming(POP)范式,再到 Swift Concurrency 的现代并发模型,Swift 的每一个特性都直接影响日常开发质量和面试表现。
知识全景图
核心知识点一览
1. 值类型 vs 引用类型
Swift 最独特的设计之一是大量使用值类型(struct/enum)而非引用类型(class)。这从根本上减少了共享可变状态带来的 Bug。
| 特性 | 值类型(struct/enum) | 引用类型(class) |
|---|---|---|
| 存储位置 | 通常在栈上(小型)或堆上(大型) | 堆上 |
| 赋值行为 | 拷贝(Copy-on-Write 优化) | 共享引用 |
| 可变性控制 | let 完全不可变 | let 仅引用不可变 |
| 继承 | ❌ 不支持(用协议组合) | ✅ 支持 |
| 线程安全 | 天然安全(无共享) | 需要同步机制 |
| 典型代表 | Int, String, Array, Dictionary | UIViewController, URLSession |
Swift 标准库中 绝大多数类型都是 struct(包括 String、Array、Dictionary),这是有意为之的设计决策——降低复杂度、提升线程安全。
2. Optional 类型系统
Optional 是 Swift 类型安全的基石,本质是一个枚举:
enum Optional<Wrapped> {
case none
case some(Wrapped)
}
掌握 if let、guard let、??、可选链、隐式解包等用法是基本功。
3. 协议与面向协议编程(POP)
Swift 强调 Protocol-Oriented Programming,通过协议+扩展实现代码复用,而非传统的类继承:
protocol Drawable {
func draw()
}
extension Drawable {
func draw() {
print("Default drawing")
}
}
4. 泛型系统
泛型 让代码兼顾类型安全与复用性:
func swapValues<T>(_ a: inout T, _ b: inout T) {
let temp = a
a = b
b = temp
}
配合 where 约束和关联类型(associatedtype),泛型是协议抽象的核心。
5. 闭包
闭包 是 Swift 中的一等公民,理解捕获语义(值捕获 vs 引用捕获)、@escaping、[weak self] 是避免内存泄漏的关键。
6. 枚举与模式匹配
Swift 的枚举远比 C/OC 的枚举强大——支持关联值、方法、遵循协议。配合 switch/if case/guard case 的模式匹配,是处理复杂状态的利器。
7. 错误处理
Swift 的错误处理基于 Error 协议 + do-catch + throws,配合 Result 类型用于异步场景。
8. 属性包装器(Property Wrapper)
@propertyWrapper 是 SwiftUI 的基础(@State、@Binding、@Published),也可以自定义用于校验、持久化等场景。
9. Swift Concurrency
Swift 并发是 Swift 5.5+ 引入的现代并发模型:
- async/await:替代回调地狱
- Actor:保护共享可变状态
- Structured Concurrency:Task/TaskGroup 管理并发
10. 访问控制
访问控制五级:open > public > internal > fileprivate > private,理解 open vs public 的区别(能否在模块外继承/重写)。
11. Swift 新特性
Swift 持续演进,新特性如 Macro、Parameter Pack、if/switch 表达式、~Copyable 等不断扩展语言能力。
学习路径建议
- 先打基础:类型系统(值/引用、Optional)→ 闭包
- 掌握抽象:协议 + 泛型 → 枚举 + 模式匹配
- 进阶特性:属性包装器 → Swift Concurrency
- 持续更新:关注每年 Swift 版本新特性