首页 / Swift 编程语言教程 / 常用标准库类型速查

Swift 编程语言教程

常用标准库类型速查

本教程共 93 篇 · 第 93 篇 · 更新于 2026-08-08 · 约 7 分钟阅读

SwiftSwift 编程语言教程标准库StringArrayDictionaryOptional速查

本节目标:把最常用标准库类型的”长什么样、能干什么”压成一张可随手翻的表,写代码时不必每次去翻文档。

Swift 标准库体量很大,但日常 80% 的工作只围着几个类型转。下面按”你多久用一次”排序,挑最高频的属性与方法列出。每张表下的小字,是正文没强调、但容易踩的坑。

1-1 String:字符串

String 是值类型,赋值时拷贝语义(实际走写时复制,省内存)。它代表一系列字符,支持 Unicode,所以”字符数”不等于”字节数”。

常用项说明
count字符个数(不是字节数)
isEmpty是否为空串
+ / append(_:)拼接
contains(_:)是否包含子串
hasPrefix(_:) / hasSuffix(_:)是否以某串开头 / 结尾
lowercased() / uppercased()转大小写(返回新串)
split(separator:)按分隔符切成数组
replacingOccurrences(of:with:)替换
firstIndex(of:)找某字符位置
String(format:...)格式化构造(需 import Foundation)
Warning

别用 string.characters.count 之类旧写法,6.x 里直接 string.count。另外 count 对复杂 emoji 按”字符”计,界面限制长度时要小心。

1-2 Array:数组

有序、可重复、值类型。下标越界会直接崩溃,这是用数组最容易出的事。

常用项说明
count / isEmpty元素个数 / 是否为空
first / last首尾元素(可选,空时 nil)
append(_:) / +=追加
insert(_:at:)指定位置插入
remove(at:) / removeLast()移除
contains(_:)是否包含
firstIndex(of:)查位置
map / filter / reduce高阶变换
sorted() / reversed()排序 / 反转(返回新集合)
enumerated()带下标遍历
joined(separator:)数组合成串
Tip

遍历且需要下标时优先 for (i, v) in arr.enumerated(),比自己维护计数器清爽,也不易越界。

1-3 Dictionary:字典

键值对集合,键必须可哈希(Hashable)。读不存在的键返回 nil,不会崩——这正是它和数组下标最大的区别。

常用项说明
count / isEmpty条目数 / 是否为空
keys / values键集合 / 值集合
dict[key]按下标取(返回可选)
dict[key, default: x]取不到给默认值,且可写入
updateValue(_:forKey:)更新并返回旧值
removeValue(forKey:)删除
contains(where:)条件判断
mapValues(_:)只变换值,键不变
merging(_:uniquingKeysWith:)合并两个字典
Note

dict[key] 永远返回可选,因为键可能不存在。想避免一堆解包,用 dict[key, default: 0] 这类下标默认值写法最省心。

1-4 Set:集合

无序、元素唯一、值类型。擅长去重和集合运算(交并差)。

常用项说明
count / isEmpty元素数 / 是否为空
contains(_:)是否包含(极快)
insert(_:) / remove(_:)增 / 删
union(_:)并集
intersection(_:)交集
subtracting(_:)差集
symmetricDifference(_:)对称差
isSubset(of:) / isSuperset(of:)子集 / 超集判断

用 Set 去重最常见:Array(Set(arr)) 一行搞定,只是顺序会乱。要保序去重得自己写循环。

1-5 Optional:可选类型

可选是 Swift 安全性的核心,本质是枚举 Optional<Wrapped>,只有 some(值)none(即 nil) 两种状态。它提醒你”这里可能没有值”。

常用项说明
?声明可选:Int?
if let / guard let安全解包绑定
??nil 合并,给默认值
?.可选链,链式调用
!强制解包(无值则崩,慎用)
map(_:) / flatMap(_:)有值时变换,无值返 nil
nil表示”没有值”
Warning

强制解包 x! 在 x 为 nil 时直接崩溃。只在你 100% 确定有值时才用,否则优先 if let??

1-6 数值类型:Int / Double / Bool

整数默认 Int(跟随平台位宽),浮点用 Double。它们都遵循一堆协议,能直接做比较、哈希。

常用项说明
Int.min / Int.max当前平台整数边界
Double.pi圆周率常量
rounded() / rounded(.down)四舍五入 / 向下取整
isZero / isNaN / isFinite浮点状态判断
magnitude绝对值
Bool&& `
Note

别拿 IntDouble 直接相加,类型不同会报错。显式转换:Double(x)Int(y)。这是初学者高频编译错误。

1-7 元组 Tuple 与 区间 Range

元组是临时把几个值打包,不用专门定义类型;区间常用于循环和下标。

类型常用项说明
元组(name: "小明", age: 18)命名元素,用 .name
元组(0, "零")匿名元素,用 .0 .1
闭区间1...5含 5,类型 ClosedRange
半开区间1..<5不含 5,类型 Range
区间~=模式匹配,用于 switchcontains

元组常在函数要返回多个值时出场;区间最常被忘的能力是”判断某数在不在范围里”——range.contains(x),比手写 x >= a && x <= b 更清晰。

1-8 一个贯穿全局的区别:值语义与引用语义

前面这些类型里,String、Array、Dictionary、Set、Int、Double、Bool、元组都是值类型,赋值时拷贝(实际写时复制,省内存);而类 class 是引用类型,赋值只传引用。这差别直接影响”我改一个,另一个变不变”。

var a = [1, 2, 3]
var b = a
b.append(4)
// a 仍是 [1, 2, 3],b 是 [1, 2, 3, 4]

值类型这种”各改各的”特性,让并发和多线程下更安全——不会出现两个地方偷偷改同一个对象。理解这一点,你就不难决定何时用 struct 何时用 class,也明白为什么标准库集合默认都是值类型。

1-9 常用协议让类型更好用

这些类型之所以能直接 == 比较、print 打印、当字典键,是因为它们遵循了 EquatableCustomStringConvertibleHashable 等协议。你自己定义的类型若想享受同等待遇,只需声明遵循并让编译器合成默认实现:

struct Point: Equatable, Hashable {
    let x: Int
    let y: Int
}

编译器会自动合成 ==hash。这比手写安全,也不会漏掉某个字段。写自定义类型时,能遵循就遵循,标准库和算法(如 containsfirstIndex)会立刻认得它。

1-10 选类型的经验法则

存一组有序、可重复的同质数据用 Array;需要按键查找用 Dictionary;要去重或做集合运算用 Set;临时返回多个值用元组;不确定有没有值用 Optional 包一层。字符串当文本,数值当计算,区间当下标或判断。

初学者常犯的错是用 Array 硬当字典(靠下标找),或该用 Optional 却用空字符串表示”无”。选对类型,代码既短又不易错。这八类是你工具箱里最顺手的扳手,先用熟它们。类型选对了,后面的逻辑写起来会顺很多;选错了,往往要在业务代码里打各种补丁来弥补类型本身的缺陷,得不偿失。

1-11 小结

这八类类型覆盖了你绝大部分代码:String/Array/Dictionary/Set 是集合四件套,Optional 管”可能有/可能没有”,Int/Double/Bool 管数值,Tuple/Range 管临时组合与范围。记住它们的值语义(赋值即拷贝)和各自下标的返回类型(数组越界崩、字典返可选),能避开大多数运行时坑。到此,全书 93 章正文结束。

最后提醒一点:标准库远不止这些,像 Data(二进制)、Date(时间)、Result(结果或错误)、CharacterIndexPath 等也很常用,但它们更偏特定场景,需要时再查官方文档即可。把今天这八类练到不用想就能用,你的 Swift 日常开发就稳了一大半。

上一篇
语法速查附录
下一篇
已经是最后一篇啦