Swift for 循环(手把手讲解)

Swift for 循环入门:从基础语法到实战应用

在 Swift 编程语言中,循环结构是处理重复任务的核心工具之一。其中,for 循环因其简洁性和强大功能,成为开发者日常编码中使用频率最高的控制流语句。无论是遍历数组、处理集合数据,还是执行固定次数的操作,Swift for 循环 都能以优雅的方式完成任务。

想象一下,你要给班级里的 30 位同学发成绩单。如果手动写 30 次 print("同学A:85分"),不仅费时,还容易出错。而使用 for 循环,只需几行代码,就能自动完成全部输出。这就是循环的意义——让机器替你重复劳动,而你专注于逻辑设计。

本文将带你从零开始掌握 Swift for 循环 的核心语法与实际用法,帮助初学者建立清晰认知,也帮助中级开发者深入理解其底层机制和高级用法。


for in 循环的基本语法与结构

for in 是 Swift 中最常用的 for 循环形式,用于遍历集合类型的数据,比如数组、字典、字符串等。它的基本语法结构如下:

for 变量 in 集合 {
    // 循环体代码
}

这里的 变量 是每次迭代时从集合中取出的元素,而 集合 可以是任何遵循 Sequence 协议的类型。

示例:遍历数组

let scores = [85, 92, 78, 96, 88]

// 使用 for in 遍历数组中的每一个分数
for score in scores {
    print("当前分数是:\(score)")
}

注释说明:

  • scores 是一个整型数组,包含 5 个元素。
  • for score in scores 表示每次从 scores 中取出一个元素,赋值给变量 score
  • print("当前分数是:\(score)") 是循环体,会执行 5 次,每次打印当前分数。
  • 输出结果:
    当前分数是:85
    当前分数是:92
    当前分数是:78
    当前分数是:96
    当前分数是:88
    

这个例子展示了 Swift for 循环 如何自动管理迭代过程,无需手动控制索引,大大降低了出错概率。


与索引结合的 for 循环:使用 indices

在某些场景下,你不仅需要访问元素本身,还需要知道它的位置(即索引)。这时可以使用 indices 属性,配合 for 循环获取索引值。

let fruits = ["苹果", "香蕉", "橙子", "葡萄"]

// 遍历索引,同时获取索引和对应元素
for index in fruits.indices {
    print("第 \(index + 1) 个水果是:\(fruits[index])")
}

注释说明:

  • fruits.indices 返回一个包含所有有效索引的集合(如 0..<4)。
  • index 是当前的索引值(从 0 开始)。
  • fruits[index] 通过索引访问对应元素。
  • index + 1 是为了让输出更符合人类阅读习惯(第1个、第2个)。

输出结果:

第 1 个水果是:苹果
第 2 个水果是:香蕉
第 3 个水果是:橙子
第 4 个水果是:葡萄

这种写法特别适合需要对位置敏感的业务逻辑,比如表格行号、排序索引、数据校验等。


从 0 到 N 的计数循环:for 循环的区间用法

当你需要执行固定次数的操作时,可以使用区间(Range)配合 for 循环。Swift 提供了两种主要区间类型:

  • 0..<n:左闭右开区间,包含 0 到 n-1。
  • 0...n:闭区间,包含 0 到 n。

示例:打印 1 到 10 的数字

// 使用左闭右开区间 1..<11,表示从 1 到 10
for i in 1..<11 {
    print("当前数字是:\(i)")
}

注释说明:

  • 1..<11 表示从 1 开始,到 10 结束(不包括 11)。
  • i 是循环变量,每次递增 1。
  • 循环共执行 10 次,输出 1 到 10。

如果你希望包含 11,可以使用闭区间:

for i in 1...11 {
    print("当前数字是:\(i)")
}

输出结果将从 1 到 11。

实际应用:生成乘法表

// 打印 9x9 乘法表
for i in 1...9 {
    for j in 1...9 {
        let product = i * j
        print("\(i) × \(j) = \(product)", terminator: "\t") // 不换行,用制表符分隔
    }
    print() // 每行结束后换行
}

注释说明:

  • 外层循环 i 控制行数(1 到 9)。
  • 内层循环 j 控制每行的列数(1 到 9)。
  • terminator: "\t" 避免每条输出自动换行,使输出更紧凑。
  • print() 单独调用用于换行,保证每行完整显示。

这种嵌套循环结构是 Swift for 循环 在实际项目中的典型用法。


遍历字典:for 循环与键值对处理

字典(Dictionary)是键值对集合,Swift for 循环 同样支持遍历字典。通过解构语法,可以同时获取键和值。

let studentGrades = [
    "张三": 88,
    "李四": 95,
    "王五": 76,
    "赵六": 92
]

// 遍历字典,同时获取 key 和 value
for (name, grade) in studentGrades {
    print("学生 \(name) 的成绩是:\(grade) 分")
}

注释说明:

  • for (name, grade) in studentGrades 使用了元组解构语法。
  • name 接收键(String 类型),grade 接收值(Int 类型)。
  • 字典遍历顺序是不确定的(因为哈希结构),但每次运行结果一致。

输出示例(顺序可能不同):

学生 李四 的成绩是:95 分
学生 张三 的成绩是:88 分
学生 赵六 的成绩是:92 分
学生 王五 的成绩是:76 分

这个模式在处理配置文件、用户信息、统计报表等场景中极为常见。


高级技巧:跳过循环与提前退出

有时你可能需要在循环中根据条件跳过当前迭代,或提前终止整个循环。Swift 提供了 continuebreak 语句来实现这些行为。

continue:跳过当前迭代

let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

for num in numbers {
    if num % 2 == 0 {
        continue // 如果是偶数,跳过本次循环
    }
    print("奇数:\(num)")
}

注释说明:

  • if num % 2 == 0 判断是否为偶数。
  • continue 使程序跳过当前循环体剩余代码,直接进入下一轮。
  • 输出结果:
    奇数:1
    奇数:3
    奇数:5
    奇数:7
    奇数:9
    

break:提前退出循环

for i in 1...100 {
    if i == 10 {
        break // 当 i 等于 10 时,终止循环
    }
    print("当前数字:\(i)")
}

注释说明:

  • 循环在 i == 10 时被 break 中断。
  • 只会输出 1 到 9,不会执行 10 及之后的代码。

这两个控制语句配合 Swift for 循环,可以实现复杂的流程控制逻辑,提高代码效率。


总结:掌握 Swift for 循环的关键点

Swift for 循环 不仅语法简洁,而且功能强大,适用于各种数据遍历场景。通过本文的学习,你应该已经掌握了以下核心能力:

  • 使用 for in 遍历数组、字典、字符串等集合。
  • 结合 indices 获取元素索引,实现位置敏感操作。
  • 使用区间(..<...)实现计数循环。
  • 在嵌套循环中构建复杂逻辑,如乘法表。
  • 利用 continuebreak 灵活控制循环流程。

记住,良好的循环设计能让你的代码更清晰、更高效。不要一看到重复就写重复代码,而是思考是否可以用 Swift for 循环 来优化。

最后,无论是初学者还是有经验的开发者,持续练习和实际项目应用,才是掌握 Swift for 循环 的唯一路径。从今天开始,尝试在你的下一个项目中,用 for 循环替换掉重复的 if-else 或冗余代码吧!