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 中,循环主要分为三类:
for-in
循环:遍历集合或范围的固定次数。while
循环:条件满足时持续执行,先判断条件后执行。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("输入已通过验证!")
解析:
- 即使用户首次输入空字符串,循环也会先执行
print
和readLine()
,再检查条件。 - 只有当
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
解析:
- 游戏需要至少运行一次循环,让用户有首次猜测的机会。
- 循环在每次猜测后判断条件,若未猜中则继续。
进阶技巧:与 break
、continue
的结合
技巧 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
循环的核心逻辑、语法结构及典型应用场景。其“先执行后判断”的特性,使其在需要至少一次操作或用户交互的场景中尤为实用。
学习建议
- 练习基础案例:尝试用
repeat-while
实现计算器、倒计时等功能。 - 对比其他循环:编写相同功能的
while
和repeat-while
代码,理解差异。 - 阅读开源代码:观察 Swift 项目中
repeat-while
的实际应用。
掌握 repeat-while
循环不仅是语法层面的提升,更是对编程逻辑和问题解决能力的深化。希望本文能帮助开发者在 Swift 开发中更灵活地运用这一工具,构建高效、优雅的代码结构。