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  

关键点解析

  1. 变量 count 初始化为 0
  2. 每次循环前检查 count < 5,若条件为真则执行循环体
  3. 循环体内通过 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  

最佳实践

  1. 确保循环体内有变量修改逻辑
  2. 使用断点调试或打印语句验证循环条件
  3. 对于复杂条件,可将逻辑提取为独立函数

3.3 Break 与 Continue 的协同使用

While 循环可通过 breakcontinue 关键字实现更精细的流程控制:

  • 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 问题:循环体未执行,但条件看似满足

原因:变量未正确初始化或条件逻辑错误
解决方案

  1. 检查变量初始值
  2. 打印条件表达式值进行调试
  3. 使用断点逐步执行代码

5.2 问题:循环次数超出预期

原因:计数器未正确递增或条件判断方向错误
解决方案

  • 在循环体内添加 print 语句跟踪变量变化
  • 使用 assert 断言验证关键变量值

结论

通过本文的学习,读者应已掌握 Swift While 循环 的核心语法、应用场景及常见问题的解决方法。无论是通过“先判断后执行”的 while 循环,还是“先执行后判断”的 repeat-while 循环,开发者都能根据具体需求选择最合适的工具。在实际开发中,建议结合 For 循环与 While 循环的优势,灵活构建高效、可维护的代码逻辑。掌握这一基础但强大的控制结构,将为更复杂的算法设计与系统开发打下坚实的基础。

实践建议:尝试将 For 循环改写为 While 循环,对比两者实现方式的差异,并在实际项目中应用 While 循环处理动态条件场景。通过不断练习与反思,循环控制结构的使用将逐渐成为编程思维中不可或缺的一部分。

最新发布