讲讲 swift 中的循环标签

这里每天分享一个 iOS 的新知识,快来关注我吧

前言

昨天的文章讲了 swift 中常见的循环,今天来讲讲跟循环相关的另外一个小知识。

swift 基础:讲一讲 swift 中的循环

for-in 循环中,有 continuebreak 两个用来中断循环的关键字,continue 用来跳出本次循环,进入下次循环。break 用来中断整个迭代。

但是大家有没有想过,如果在一个多层嵌套的 for-in 循环中,这两个关键字的表现是什么?

实际测试下来,continuebreak 在多层嵌套的 for-in 循环中只会作用在当前的那一层循环,举个例子:

swift 复制代码
for i in 0..<3 {
    print("i = \(i)")
    for j in 0..<3 {
        if j == 1 {
            break
        }
        print("j = \(j)")
    }
}
// i = 0
// j = 0
// i = 1
// j = 0
// i = 2
// j = 0

根据最终的打印情况来看,break 只是中断了内层的循环,而没有影响外层的循环。

循环标签

还是上边的例子,如果我想要在内层的循环中 break 掉外层的循环,应该怎么做呢?

swift 中有个 for-in 的标记语句,叫做循环标签(Loop Labels),专门用来解决这个问题。

循环标签允许你在内层循环中使用 breakcontinue 语句来控制外层循环的执行,或者在某些情况下跳过多层循环的一部分:

swift 复制代码
outerLoop: for i in 0..<3 {
    print("i = \(i)")
    for j in 0..<3 {
        if j == 1 {
            break outerLoop
        }
        print("j = \(j)")
    }
}
// i = 0
// j = 0

在上述示例中,我们定义了两个循环,外层循环使用标签 outerLoop 标记。在达到条件后,使用 break outerLoop 来直接退出外层循环。

在其他的循环中也可以使用

while 循环

swift 复制代码
outerLoop: while i < 3 {
    print("i = \(i)")
    i += 1
    for j in 0..<3 {
        if j == 1 {
            break outerLoop
        }
        print("j = \(j)")
    }
}
// i = 0
// j = 0

repeat 循环

swift 复制代码
outerLoop: repeat {
    print("i = \(i)")
    i += 1
    for j in 0..<3 {
        if j == 1 {
            break outerLoop
        }
        print("j = \(j)")
    }
} while i < 3
// i = 0
// j = 0

下面是一些有关循环标签的关键要点

  1. 标签命名 :标签名称是我们自己定义的,可以根据需要选择有语义的名称。标签名称后面跟着冒号 :

  2. 使用场景:break 和 continue 语句都可以使用循环标签。

  3. 谨慎过度使用:尽管循环标签在某些情况下非常有用,但过度使用它们可能会导致代码复杂性增加,难以理解。

这里每天分享一个 iOS 的新知识,快来关注我吧

本文同步自微信公众号 "iOS新知",每天准时分享一个新知识,这里只是同步,想要及时学到就来关注我吧!

相关推荐
鸿蒙布道师3 小时前
鸿蒙NEXT开发正则工具类RegexUtil(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
二流小码农5 小时前
鸿蒙开发:如何更新对象数组
android·ios·harmonyos
GeniuswongAir7 小时前
苹果新规生效:即日起不再接受iOS 17 SDK编译的应用提交
ios
东坡肘子12 小时前
Chrome 会成为 OpenAI 的下一个目标?| 肘子的 Swift 周报 #081
人工智能·swiftui·swift
恋猫de小郭1 天前
腾讯 Kuikly 正式开源,了解一下这个基于 Kotlin 的全平台框架
android·前端·ios
超人强1 天前
一文搞定App启动流程、时间监测、优化措施
ios
一牛1 天前
Appkit: 菜单是如何工作的
macos·ios·objective-c
JQShan1 天前
React Native小课堂:箭头函数 vs 普通函数,为什么你的this总迷路?
javascript·react native·ios
画个大饼1 天前
Swift与iOS内存管理机制深度剖析
开发语言·ios·swift