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

相关推荐
初级代码游戏2 小时前
iOS开发 Swift 速记2:三种集合类型 Array Set Dictionary
开发语言·ios·swift
AIsoft_868810 小时前
iPhone录音重点标记:会议录音与重点内容同步保存功能实测
ios·iphone
00后程序员张10 小时前
使用Instruments工具深入分析iOS应用性能与启动时间优化
android·macos·ios·小程序·uni-app·cocoa·iphone
90后的晨仔13 小时前
Xcode 26.6编译 AFNetworking 报错全解:5 种方案从应急到根治
ios
初级代码游戏1 天前
iOS开发 Swift 速记1:变量和基本数据类型
开发语言·ios·swift
清水迎朝阳1 天前
客户端软件 — 用户统计方案
服务器·c++·客户端·用户统计
for_ever_love__1 天前
iOS:网络请求再学习
网络·学习·ios·objective-c
大龄秃头程序员1 天前
Swift 值类型真的每次都会拷贝吗?OC 老兵聊聊 COW
swift
2501_915921431 天前
SwiftUI开发框架入门指南:从基础到实战
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
2501_916007471 天前
Python实现HTTPS爬虫的完整指南:使用requests、BeautifulSoup、Selenium和Scrapy
爬虫·python·ios·小程序·https·uni-app·iphone