Swift repeat…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 语言提供了多种循环结构,其中 repeat-while 循环因其独特的执行顺序和适用场景,成为开发者需要熟练掌握的进阶技巧。本文将从基础到实战,结合案例和代码示例,深入解析 repeat-while 循环的原理、使用场景及常见问题,帮助开发者高效利用这一工具。


基础概念:循环的类型与逻辑

在 Swift 中,循环主要分为三类:

  1. for-in 循环:遍历集合或范围的固定次数。
  2. while 循环:条件满足时持续执行,先判断条件后执行
  3. repeat-while 循环:先执行代码块,再判断条件,保证至少执行一次

为什么需要 repeat-while

想象一个场景:你需要让用户输入密码,但必须确保用户至少尝试一次输入,即使初始条件不满足。此时,repeat-while 循环的“先执行后判断”特性就派上用场了。它与 while 循环的区别,可以用一个比喻来理解:

  • while 循环如同“先看天气再决定是否出门”——如果条件不满足(下雨),直接不执行。
  • repeat-while 循环则像“先出门尝试,再根据天气决定是否继续”——至少执行一次动作,之后才判断是否重复。

语法结构与执行流程

语法格式

repeat {  
    // 需要重复执行的代码块  
} while 条件表达式  

执行流程图

步骤描述
1执行代码块内的所有语句,无论条件是否满足
2判断 while 后的条件表达式是否为 true
3如果条件为 true,重复执行代码块;否则,退出循环。

关键特性

  • 至少执行一次:即使初始条件不满足,代码块也会运行一次。
  • 条件判断在循环体后:与 while 循环的“先判断后执行”相反。

使用场景与案例分析

场景 1:确保至少执行一次操作

案例:用户输入验证
假设需要用户输入一个非空字符串,必须至少尝试一次输入:

var input = ""  
repeat {  
    print("请输入一个非空字符串:")  
    input = readLine() ?? ""  
} while input.isEmpty  

print("输入已通过验证!")  

解析

  • 即使用户首次输入空字符串,循环也会先执行 printreadLine(),再检查条件。
  • 只有当 input 不为空时,循环才会终止。

场景 2:游戏或交互式程序的“回合制”控制

案例:猜数字游戏
设计一个简单游戏,用户需猜测 1~100 的随机数,直到猜中为止:

let target = Int.random(in: 1...100)  
var guess = 0  

repeat {  
    print("请输入你的猜测:")  
    guess = Int(readLine() ?? "0") ?? 0  

    if guess < target {  
        print("太小了!")  
    } else if guess > target {  
        print("太大了!")  
    } else {  
        print("恭喜!你猜对了!")  
    }  
} while guess != target  

解析

  • 游戏需要至少运行一次循环,让用户有首次猜测的机会。
  • 循环在每次猜测后判断条件,若未猜中则继续。

进阶技巧:与 breakcontinue 的结合

技巧 1:提前终止循环

repeat-while 中,可通过 break 立即跳出循环。例如,在验证输入时,若用户输入特殊字符(如“exit”)可强制退出:

repeat {  
    print("输入 'exit' 退出程序,否则继续:")  
    let input = readLine() ?? ""  
    if input == "exit" {  
        break  
    }  
} while true  

注意:这里 while true 表示无限循环,但通过 break 控制退出。

技巧 2:跳过当前迭代

continue 可跳过当前循环的剩余代码,直接进入下一轮判断。例如,忽略非数字输入:

repeat {  
    print("请输入一个数字:")  
    guard let input = readLine(), let num = Int(input) else {  
        print("无效输入,跳过本次循环。")  
        continue  
    }  
    // 其他逻辑...  
} while true  

常见问题与解决方案

问题 1:循环不执行或无限循环

原因

  • 不执行:代码块本身有逻辑错误,导致循环未被触发。
  • 无限循环:条件表达式始终为 true,或未更新相关变量。

解决方案

  • 调试条件表达式:打印 while 条件的值,确保其最终变为 false
  • 检查变量更新:确保循环内修改了影响条件的变量。例如:
    var count = 0  
    repeat {  
        print(count)  
        count += 1  // 必须更新 count,否则条件永远为 true  
    } while count < 5  
    

问题 2:与 while 循环混淆

对比示例

// repeat-while:至少执行一次  
var count = 0  
repeat {  
    print("执行了")  
} while count > 0  // 初始 count=0,但循环仍执行一次  

// while 循环:不执行  
while count > 0 {  
    print("不会执行")  
}  

实战案例:斐波那契数列生成

需求

生成斐波那契数列直到数值超过 1000,并输出所有结果。

实现思路

  • 使用 repeat-while 确保至少生成前两个初始值(1 和 1)。
  • 在循环体中计算新数值,并更新条件变量。
var a = 1  
var b = 1  
var sequence: [Int] = [a, b]  

repeat {  
    let next = a + b  
    sequence.append(next)  
    a = b  
    b = next  
} while b <= 1000  

print("斐波那契数列:\(sequence)")  

输出

斐波那契数列:[1, 1, 2, 3, 5, 8, ..., 987, 1597]  

总结与扩展

通过本文的讲解,开发者可以清晰理解 Swift repeat-while 循环的核心逻辑、语法结构及典型应用场景。其“先执行后判断”的特性,使其在需要至少一次操作或用户交互的场景中尤为实用。

学习建议

  1. 练习基础案例:尝试用 repeat-while 实现计算器、倒计时等功能。
  2. 对比其他循环:编写相同功能的 whilerepeat-while 代码,理解差异。
  3. 阅读开源代码:观察 Swift 项目中 repeat-while 的实际应用。

掌握 repeat-while 循环不仅是语法层面的提升,更是对编程逻辑和问题解决能力的深化。希望本文能帮助开发者在 Swift 开发中更灵活地运用这一工具,构建高效、优雅的代码结构。

最新发布