Swift 循环详解:for-in、while 与 repeat-while 实战指南

📅 2026/8/15 11:39:48
Swift 循环详解:for-in、while 与 repeat-while 实战指南
1. 引言循环是编程语言中最基础也最常用的控制结构之一。在 Swift 中循环不仅用于遍历数组、字典等集合类型还广泛应用于数值计算、状态轮询和异步任务处理等场景。本文将从 Swift 的三种循环语法入手结合丰富的代码实例帮助你彻底掌握 for-in、while 和 repeat-while 的使用技巧与适用场景。2. for-in 循环for-in 循环是 Swift 中最常用的循环形式它可以直接遍历序列类型如区间、数组、字典、字符串等语法简洁且可读性强。2.1 遍历区间使用闭区间运算符...和半开区间运算符..可以快速生成数值区间并进行遍历。// 闭区间包含 1 到 5 for index in 1...5 { print(当前数字\(index)) } // 输出1 2 3 4 5 // 半开区间包含 0 到 4不包含 5 for index in 0..5 { print(索引\(index)) } // 输出0 1 2 3 42.2 遍历数组遍历数组时可以直接获取每个元素如果需要同时获取索引和值可以使用 enumerated() 方法。let fruits [苹果, 香蕉, 橙子] // 直接遍历元素 for fruit in fruits { print(水果\(fruit)) } // 同时获取索引和值 for (index, fruit) in fruits.enumerated() { print(第 \(index 1) 个水果是 \(fruit)) }2.3 遍历字典字典的遍历会以键值对key-value的形式返回可以使用元组语法同时取出键和值。let scores [小明: 90, 小红: 85, 小刚: 78] for (name, score) in scores { print(\(name) 的分数是 \(score)) } // 只遍历键 for name in scores.keys { print(学生\(name)) } // 只遍历值 for score in scores.values { print(分数\(score)) }2.4 遍历字符串Swift 中的字符串可以直接被遍历每次迭代返回一个 Character 字符。let message Hello for char in message { print(char) } // 输出H e l l o2.5 使用 where 进行条件过滤在 for-in 循环中可以使用 where 子句对遍历的元素进行条件过滤避免在循环体内编写额外的 if 判断。let numbers [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] // 只打印偶数 for number in numbers where number % 2 0 { print(偶数\(number)) } // 输出2 4 6 8 102.6 使用 stride 进行步进遍历当需要按照指定步长遍历数值时可以使用 stride(from:to:by:) 或 stride(from:through:by:) 函数。// 从 0 到 10步长为 2不包含 10 for number in stride(from: 0, to: 10, by: 2) { print(number) } // 输出0 2 4 6 8 // 从 10 到 0步长为 -3包含 0 for number in stride(from: 10, through: 0, by: -3) { print(number) } // 输出10 7 4 13. while 循环while 循环在每次迭代开始前检查条件只有当条件为 true 时才执行循环体。它适用于循环次数不确定、需要根据运行时状态判断是否继续的场景。3.1 基础用法var count 0 while count 5 { print(当前计数\(count)) count 1 } // 输出0 1 2 3 43.2 实战猜数字游戏while 循环非常适合实现需要反复尝试直到满足条件的逻辑例如猜数字游戏。import Foundation let target Int.random(in: 1...100) var guess 0 var attempts 0 print(猜一个 1 到 100 之间的数字) while guess ! target { attempts 1 print(第 \(attempts) 次猜测, terminator: ) if let input readLine(), let number Int(input) { guess number if guess target { print(猜大了) } else if guess target { print(猜小了) } } else { print(输入无效请重新输入) } } print(恭喜你猜对了答案是 \(target)共用了 \(attempts) 次)3.3 实战模拟掷骰子直到出现 6import Foundation var rollCount 0 var diceValue 0 while diceValue ! 6 { diceValue Int.random(in: 1...6) rollCount 1 print(第 \(rollCount) 次掷骰子结果是 \(diceValue)) } print(终于掷出了 6共掷了 \(rollCount) 次)4. repeat-while 循环repeat-while 循环与 while 循环的区别在于它先执行一次循环体再检查条件。因此repeat-while 至少会执行一次循环体适用于至少需要执行一次操作的场景。4.1 基础用法var number 10 repeat { print(当前值\(number)) number - 3 } while number 0 // 输出10 7 4 14.2 实战用户输入验证repeat-while 非常适合用于需要至少执行一次输入操作的场景例如要求用户输入一个合法的数字。import Foundation var inputNumber: Int? repeat { print(请输入一个 1 到 10 之间的数字, terminator: ) if let input readLine(), let number Int(input), (1...10).contains(number) { inputNumber number } else { print(输入无效请重新输入) } } while inputNumber nil print(你输入的数字是\(inputNumber!))4.3 while 与 repeat-while 的区别下面的例子可以直观地展示两者的区别当初始条件为 false 时while 循环一次都不会执行而 repeat-while 至少会执行一次。var condition false // while 循环条件为 false循环体一次都不执行 while condition { print(这行不会输出) } // repeat-while 循环先执行一次循环体再判断条件 repeat { print(这行会输出一次) } while condition // 输出这行会输出一次5. 循环控制语句在实际开发中经常需要在循环中提前跳出或跳过某些迭代。Swift 提供了 break、continue 和 fallthrough 等控制语句。5.1 break 跳出循环break 用于立即终止整个循环的执行跳出循环体。let numbers [1, 3, 5, 7, 9, 10, 12] for number in numbers { if number % 2 0 { print(找到第一个偶数\(number)) break } print(检查数字\(number)) } // 输出检查数字1 3 5 7 9 找到第一个偶数105.2 continue 跳过当前迭代continue 用于跳过当前迭代中剩余的代码直接进入下一次循环。for number in 1...10 { if number % 3 0 { continue } print(number) } // 输出1 2 4 5 7 8 105.3 带标签的循环在嵌套循环中可以使用标签label配合 break 或 continue 来精确控制跳出哪一层循环。outerLoop: for i in 1...3 { for j in 1...3 { if i 2 j 2 { print(命中 (2, 2)跳出外层循环) break outerLoop } print((\(i), \(j))) } } // 输出(1, 1) (1, 2) (1, 3) (2, 1) (2, 2) 命中 (2, 2)跳出外层循环6. 实战案例综合运用下面通过两个完整的实战案例综合运用本文介绍的循环知识。6.1 案例一打印九九乘法表使用嵌套 for-in 循环打印经典的九九乘法表。for i in 1...9 { var line for j in 1...i { line \(j)×\(i)\(i * j)\t } print(line) }6.2 案例二斐波那契数列使用 for-in 循环生成斐波那契数列的前 N 项。func fibonacci(_ n: Int) - [Int] { guard n 0 else { return [] } if n 1 { return [0] } if n 2 { return [0, 1] } var sequence [0, 1] for _ in 2..n { let next sequence[sequence.count - 1] sequence[sequence.count - 2] sequence.append(next) } return sequence } let result fibonacci(10) print(result) // 输出[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]7. 总结本文详细介绍了 Swift 中的三种循环结构for-in、while 和 repeat-while并通过大量代码实例展示了它们的语法和典型应用场景。在实际开发中选择哪种循环取决于具体需求遍历集合或区间时优先使用 for-in循环次数不确定且需要先判断条件时使用 while至少需要执行一次循环体时使用 repeat-while。同时合理使用 break、continue 和循环标签可以让代码更加简洁高效。希望本文能帮助你更好地掌握 Swift 循环的使用技巧。