Swift 标准库 (iOS/macOS):完整概述
Swift 标准库是直接内置于语言中的一组基础类型、协议和函数。它为 iOS、macOS、watchOS 和 tvOS 开发提供了必要的基本功能。与属于 SDK 一部分的 Foundation 或 UIKit 框架不同,Swift 标准库无需额外导入即可直接使用。在本文中,我们将详细分析其关键组件、数据结构、协议和内存管理机制。
基本数据类型和集合
Swift 提供了强大且类型安全的集合,并针对性能进行了优化。
数组 (Array)
相同类型元素的有序集合。支持随机访问和动态调整大小。
var numbers: [Int] = [1, 2, 3]numbers.append(4)let first = numbers[0] // 1numbers.sort()集合 (Set)
唯一元素的无序集合。非常适合成员资格检查和数学运算。
let setA: Set<Int> = [1, 2, 3, 4]let setB: Set<Int> = [3, 4, 5, 6]let intersection = setA.intersection(setB) // {3, 4}let union = setA.union(setB) // {1, 2, 3, 4, 5, 6}字典 (Dictionary)
键值对的无序集合。键必须是可哈希的 (Hashable)。
var capitals: [String: String] = ["俄罗斯": "莫斯科", "美国": "华盛顿"]capitals["德国"] = "柏林"if let russiaCapital = capitals["俄罗斯"] { print(russiaCapital) // 莫斯科}协议:Swift 通用性的基础
Swift 标准库构建于协议之上,这些协议为不同类型定义了通用接口。
- Equatable — 允许使用
==比较实例。 - Hashable — 需要将类型用作字典键或集合元素。
- Comparable — 提供对象排序能力 (<, >, <=, >=)。
- Codable — 结合 Encodable 和 Decodable,用于序列化为 JSON、Property List 和其他格式。
- CaseIterable — 自动提供枚举所有值的集合。
Codable 使用示例
struct User: Codable { let id: Int let name: String let isActive: Bool}
let json = """{ "id": 42, "name": "伊万", "isActive": true}""".data(using: .utf8)!
let decoder = JSONDecoder()if let user = try? decoder.decode(User.self, from: json) { print(user.name) // 伊万}内存管理:ARC 和写时复制
Swift 使用自动引用计数 (ARC) 来管理引用类型(类)的内存。对于结构和枚举,采用值复制语义,但集合带有写时复制 (COW) 优化。
var array1 = [1, 2, 3]var array2 = array1 // 在修改之前——数据是共享的array2.append(4) // 这里发生实际复制 (COW)print(array1.count) // 3 —— 原始数组未改变泛型 (Generics)
泛型允许编写灵活且可重用的函数和类型,同时不损失性能。
func swapTwoValues<T>(_ a: inout T, _ b: inout T) { let temporaryA = a a = b b = temporaryA}
var x = 10var y = 20swapTwoValues(&x, &y) // x = 20, y = 10可选类型 (Optionals)
安全处理缺失值是 Swift 的关键特性之一。可选类型防止了空指针异常。
var optionalString: String? = "你好"// Optional bindingif let unwrapped = optional