讲讲 swift 中的循环标签

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

前言

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

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

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

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

实际测试下来,continue 和 break 在多层嵌套的 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),专门用来解决这个问题。

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

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

相关推荐
黑科技iOS上架16 小时前
双引擎解决oc/swift开发引用加固难题
开发语言·ios·swift·审核·ios混淆·执行程序差异化
wechatbot88817 小时前
企微第三方自动化开发:原生能力无阉割 API 开放平台介绍
后端·ios·微信·企业微信·ai编程·ipad
黑科技iOS上架17 小时前
iOS framework/dylib动态库定向加固实战
macos·ios·objective-c·cocoa·审核·ios混淆·执行程序差异化
可乐鸡翅yeah_2 天前
fmp4 碎片 MP4 格式 HLS 流,和传统 TS 分片有什么不一样
开发语言·javascript·ios·音视频·safari·m3u8·m3u8在线播放
茶底世界之下2 天前
为什么高精度透明图片上传到 Metal 时,必须把“拷贝像素”与“混合合成”分开
ios
老李IT笔记2 天前
iOS 27 更新延迟只能给 1 到 90 天:两个参数怎么配,配错了会发生什么
ios·智能手机
Helix2502 天前
移动端浏览器内核之争:iOS 为何强制使用 WebKit?
ios·safari·webkit·wkwebview·浏览器内核·blink·ios浏览器内核
传奇开心果编程2 天前
【SwiftUI提高练中学】第13课 实时活动与灵动岛:ActivityKit 实战
学习·ui·ios·swiftui·swift