讲讲 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新知",每天准时分享一个新知识,这里只是同步,想要及时学到就来关注我吧!

相关推荐
CodeJourney_J4 小时前
如何通过SMB协议实现手机共享电脑文件
windows·ios·smb
ipad协议开发11 小时前
企业微信iPad协议接口深度解析:技术原理、应用场景与开发实战
ios·企业微信·ipad
千里马-horse1 天前
Building a Simple Engine -- Mobile Development -- Platform considerations
android·ios·rendering·vulkan
systeminof1 天前
全新MacBook发布:苹果公司将 iPhone 芯片带入笔记本时代
ios·iphone
pop_xiaoli1 天前
effective-Objective-C 第四章阅读笔记
笔记·ios·objective-c·cocoa·xcode
前端不太难2 天前
Flutter 适合什么团队?RN / iOS 各自的边界在哪?
flutter·ios
带娃的IT创业者2 天前
解密OpenClaw系列10-OpenClaw系统要求
人工智能·macos·ios·objective-c·ai智能体·智能体开发·openclaw
systeminof2 天前
iOS 26.4 更新前瞻:Siri 架构级重构与上线时间预测
ios·重构