Swift While 循环(长文讲解)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观
在编程的世界中,循环结构如同乐曲中的重复旋律,让代码能够高效、优雅地完成重复性任务。Swift While 循环作为 Swift 语言中的一种核心控制流工具,尤其适用于那些需要动态调整循环条件的场景。无论是计算阶乘、验证用户输入,还是处理动态数据流,掌握 While 循环的使用逻辑与技巧,都能为开发者提供更灵活的解决方案。本文将通过循序渐进的方式,从基础语法到实际案例,帮助读者全面理解这一重要工具。
一、While 循环的基本语法与执行逻辑
1.1 While 循环的两种形态:先判断后执行
While 循环的核心逻辑可以比喻为“交通信号灯的控制”:只有当绿灯亮起(条件成立)时,车辆(循环体)才会启动。在 Swift 中,While 循环分为两种形式:
- while 循环:先检查条件,再执行循环体
- repeat-while 循环:先执行循环体,再检查条件
示例代码:while 循环的简单用法
var count = 0
while count < 5 {
print("当前计数:\(count)")
count += 1
}
// 输出结果:
// 当前计数:0
// 当前计数:1
// ... 直到当前计数:4
关键点解析:
- 变量
count
初始化为 0 - 每次循环前检查
count < 5
,若条件为真则执行循环体 - 循环体内通过
count += 1
避免无限循环
1.2 Repeat-While 循环:先执行后判断
与 while 循环相反,repeat-while 循环类似于“先上车后买票”的场景:无论条件如何,循环体会至少执行一次。其语法结构为:
repeat {
// 循环体
} while 条件
案例对比:两种循环的差异
// 情景:模拟用户登录验证
var loginAttempts = 3
var isAuthenticated = false
// 使用 while 循环
while loginAttempts > 0 && !isAuthenticated {
print("请输入密码:")
// 假设用户输入错误
loginAttempts -= 1
}
// 若初始时 loginAttempts = 0,则循环体一次都不会执行
// 使用 repeat-while 循环
repeat {
print("请输入密码:")
// 假设用户输入错误
loginAttempts -= 1
} while loginAttempts > 0 && !isAuthenticated
// 即使初始 loginAttempts = 0,循环体会执行一次
总结:
- while:适合需要严格条件控制的场景
- repeat-while:适合需要保证至少执行一次操作的场景
二、While 循环与 For 循环的对比与选择
2.1 语法结构的直观对比
循环类型 | 语法结构 | 适用场景 |
---|---|---|
For 循环 | for element in collection { ... } | 固定次数的迭代(如遍历数组) |
While 循环 | while condition { ... } | 动态条件的重复执行 |
2.2 深入对比:以计算阶乘为例
案例:计算 5!(5的阶乘)
// 使用 For 循环
var resultFor = 1
for i in 1...5 {
resultFor *= i
}
// 使用 While 循环
var resultWhile = 1
var multiplier = 1
while multiplier <= 5 {
resultWhile *= multiplier
multiplier += 1
}
print("For 循环结果:\(resultFor), While 循环结果:\(resultWhile)")
对比分析:
- For 循环:更简洁,适合已知迭代次数的场景
- While 循环:需要手动管理计数器,但灵活性更高(如动态调整终止条件)
选择建议:
- 若循环次数固定且可预测,优先使用 For 循环
- 若需要根据运行时条件动态调整循环次数,选择 While 循环
三、While 循环的进阶用法与陷阱规避
3.1 嵌套循环与复杂逻辑
While 循环可以与其他控制结构结合,例如嵌套循环或与条件判断结合。以下案例演示如何用 While 循环实现“斐波那契数列”:
var a = 0
var b = 1
var limit = 10
print("斐波那契数列:")
while a <= limit {
print(a, terminator: " ") // 输出后不换行
let next = a + b
a = b
b = next
}
// 输出:0 1 1 2 3 5 8
3.2 避免无限循环的技巧
无限循环是 While 循环的常见陷阱,其本质是条件始终为真且未修改变量。例如:
// 错误示例:无限循环
var counter = 0
while counter < 5 {
print(counter)
}
// 解决方案:在循环体内更新 counter
最佳实践:
- 确保循环体内有变量修改逻辑
- 使用断点调试或打印语句验证循环条件
- 对于复杂条件,可将逻辑提取为独立函数
3.3 Break 与 Continue 的协同使用
While 循环可通过 break
和 continue
关键字实现更精细的流程控制:
- break:立即终止整个循环
- continue:跳过当前迭代,进入下一次循环
案例:过滤偶数并提前终止循环
var numbers = [2, 4, 7, 9, 12, 15]
var index = 0
while index < numbers.count {
let num = numbers[index]
if num % 2 == 0 {
print("\(num) 是偶数,跳过")
continue
}
if num > 10 {
print("遇到大于 10 的数字 \(num),终止循环")
break
}
print("当前处理的数:\(num)")
index += 1
}
// 输出结果:
// 2 是偶数,跳过
// 4 是偶数,跳过
// 当前处理的数:7
// 遇到大于 10 的数字 12,终止循环
四、实际场景中的 While 循环应用
4.1 实时数据处理:网络请求重试机制
在需要多次尝试网络请求的场景中,While 循环可配合布尔标志位实现动态重试:
var retryCount = 0
let maxRetries = 3
var success = false
while retryCount < maxRetries && !success {
// 模拟网络请求
let isSuccess = checkNetworkRequest()
if isSuccess {
success = true
print("请求成功!")
} else {
retryCount += 1
print("第 \(retryCount) 次重试...")
}
}
if !success {
print("超过最大重试次数,失败")
}
4.2 游戏开发中的回合制逻辑
在回合制游戏中,While 循环可用于控制玩家和敌人的轮流行动:
var playerHealth = 100
var enemyHealth = 80
var isPlayerTurn = true
while playerHealth > 0 && enemyHealth > 0 {
if isPlayerTurn {
print("玩家回合:对敌人造成 20 点伤害")
enemyHealth -= 20
} else {
print("敌人回合:对玩家造成 15 点伤害")
playerHealth -= 15
}
isPlayerTurn.toggle()
}
print("战斗结束!玩家剩余血量:\(playerHealth)")
五、常见问题与解决方案
5.1 问题:循环体未执行,但条件看似满足
原因:变量未正确初始化或条件逻辑错误
解决方案:
- 检查变量初始值
- 打印条件表达式值进行调试
- 使用断点逐步执行代码
5.2 问题:循环次数超出预期
原因:计数器未正确递增或条件判断方向错误
解决方案:
- 在循环体内添加
print
语句跟踪变量变化 - 使用
assert
断言验证关键变量值
结论
通过本文的学习,读者应已掌握 Swift While 循环 的核心语法、应用场景及常见问题的解决方法。无论是通过“先判断后执行”的 while 循环,还是“先执行后判断”的 repeat-while 循环,开发者都能根据具体需求选择最合适的工具。在实际开发中,建议结合 For 循环与 While 循环的优势,灵活构建高效、可维护的代码逻辑。掌握这一基础但强大的控制结构,将为更复杂的算法设计与系统开发打下坚实的基础。
实践建议:尝试将 For 循环改写为 While 循环,对比两者实现方式的差异,并在实际项目中应用 While 循环处理动态条件场景。通过不断练习与反思,循环控制结构的使用将逐渐成为编程思维中不可或缺的一部分。