Skip to Content

循环(Loops)

循环有四个入口:for 走可迭代值,while 走条件,while val 走条件绑定,repeat 走固定次数。跳出的手段统一是 break 与 continue,复杂嵌套用标签指定跳转目标。

for

for 模式 in 可迭代值 逐个取出元素。迭代变量位是模式,可以直接解构:

var sum = 0; for i in 1..=10 { sum += i; } print("sum", sum);
sum 55

范围是半开或闭区间,1..5 走 1 到 4,1..=5 走到 5。带步进用 step 软关键字:

for i in 0..10 step 3 { print("步进", i); }
步进 0 步进 3 步进 6 步进 9

迭代对象是实现 Iterator 的集合、数组、范围或字符串。列表与 Map 的遍历详见类型部分的容器页。

when 守卫

for 可以带 when 条件,不满足的元素直接跳过,等价循环体第一行的 if:

for i in 1..=6 when i % 2 == 0 { print("偶", i); }
偶 2 偶 4 偶 6

repeat

固定次数的循环,当不需要循环变量的时候可以方便使用:

repeat 3 { print("咚"); }
咚 咚 咚

括号形 repeat (3) 等价。

while 与 while val

while cond 每轮先测条件。while val 模式 = 表达式 是条件绑定循环:每轮重新求值表达式,按模式测试并绑定,匹配失败即退出:

var n = 1; while n < 100 { n *= 3; } print("n", n); var maybe: int? = 3; var rounds = 0; while val v = maybe { rounds += 1; if v <= 1 { maybe = null; } else { maybe = v - 1; } } print("rounds", rounds);
n 243 rounds 3

v 在循环体内收窄为 int。maybe 改成 null 后下一轮匹配失败,循环结束。while var 同理。

break、continue 与标签

break 跳出最内层循环,continue 跳过本轮。嵌套循环要跨层时,在外层循环上写 label 名字,break / continue 带同名标签定向跳:

for i in 1..=3 label Outer { for j in 1..=3 { if j == 2 { continue; } if i == 2 { break Outer; } print(i, j); } }
1 1 1 3

i 为 2 时 break Outer 直接终止两层循环,后面的 3 1、3 3 不再执行。

注意

  • 范围字面量可以打印,print(1..5) 输出 1..5。
  • while 条件同样只收 bool。
  • 循环变量在循环体外不可见,需要带出结果就用外层变量累加,像上面的 sum。
最后更新于 2026年10月7日