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

相关推荐
报错小能手17 小时前
ios开发方向——swift错误处理:do/try/catch、Result、throws
开发语言·学习·ios·swift
程序员老刘17 小时前
放弃折腾后端服务器后,这才是独立开发MVP的最优解
flutter·客户端·firebase
小夏子_riotous19 小时前
openstack的使用——5. Swift服务的基本使用
linux·运维·开发语言·分布式·云计算·openstack·swift
开心就好20251 天前
Flutter iOS应用混淆与安全配置详细文档指南
后端·ios
mCell1 天前
MacOS 下实现 AI 操控电脑(Computer Use)的思考
macos·agent·swift
开心就好20251 天前
苹果iOS应用开发上架与推广完整教程
后端·ios
用户69371750013841 天前
XChat 为什么选择 Rust 语言开发
android·前端·ios
MonkeyKing1 天前
Objective-C Runtime 完整机制:objc_class /cache/bits 源码解析
前端·ios
用户79457223954131 天前
【DGCharts】iOS 图表渲染事实标准——8 种图表类型、高度可定制,3 行代码画出一条折线
swiftui·swift
秋雨梧桐叶落莳1 天前
【iOS】 AutoLayout初步学习
学习·macos·ios·objective-c·cocoa·xcode