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

关注我,每天分享一个关于 iOS 的新知识

前言

在 swift 开发中,用来循环的方式有很多中,比如最常用的 for 循环、高阶函数 forEach 和 repeat,尽管这些方法看起来相似,但还是有区别的。

让我们一一回顾一下它们,看看什么场景更适合使用哪一个。

for 循环

for 循环应该是所有编程语言中最著名的迭代方法,它在 Swift 中也称为 for-in 循环:

  • 比如循环 0 - 3 这个范围:
dart 复制代码
for num in 0...3 {
    print(num)
}
// 0
// 1
// 2
// 3

如果不需要序列中的每个值,可以通过使用下划线代替变量名称来忽略这些值:

go 复制代码
for _ in 0...3 {
    print("iOS 新知")
}
// iOS 新知
// iOS 新知
// iOS 新知

0...3 代表 0、1、2、3,还可以使用半开范围运算符 ( ..< ) 包含下限但不包含上限,0..<3 代表 0、1、2

  • 对数组使用 for-in 循环:
swift 复制代码
let names = ["Anna", "Alex", "Brian", "Jack"]
for name in names {
    print("Hello, \(name)!")
}
// Hello, Anna!
// Hello, Alex!
// Hello, Brian!
// Hello, Jack!
  • 字典也可以直接使用 for-in 循环:
scss 复制代码
let numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
for (animalName, legCount) in numberOfLegs {
    print("\(animalName)s have \(legCount) legs")
}
// cats have 4 legs
// ants have 6 legs
// spiders have 8 legs

forEach 循环

上面的例子也都可以用在 foreach 循环中。实际上,forEach 与 for-in 循环以相同的顺序对序列中的每个元素调用给定的闭包:

scss 复制代码
(0...3).forEach { num in
    print(num)
}
// 0
// 1
// 2
// 3

let names = ["Anna", "Alex", "Brian", "Jack"]
names.forEach { name in
    print("Hello, \(name)!")
}
// Hello, Anna!
// Hello, Alex!
// Hello, Brian!
// Hello, Jack!

let numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
numberOfLegs.forEach { (animalName, legCount) in
    print("\(animalName)s have \(legCount) legs")
}
// cats have 4 legs
// ants have 6 legs
// spiders have 8 legs

for-in 和 forEach 的区别

  1. break 和 continue 两个退出循环的关键字在 forEach 中不可用

  2. 在 forEach 中使用 return 关键字,只会退出当前循环,不会退出外层的函数

关于 forEach 的底层实现可以参考之前的文章 Foundation 中的高阶函数是怎么实现的

与 forEach 不同的是,for-in 还可以跟 where 关键字一起使用,比如,在一个数字区间的循环中,我只想打印偶数:

typescript 复制代码
for number in 0...9 where number.isMultiple(of: 2) {
    print(number)
}
// 0
// 2
// 4
// 6
// 8

While 循环

While 循环虽然不常用,但它的特点非常明显,在指定条件下循环,在某些场景下非常有用。

比如我们有个变量为数字 0,先判断是否小于 3,然后每次循环都 + 1,直到小于 3 为止:

typescript 复制代码
var number = 0

while number < 3 {
    print(number)
    number += 1
}
// 0
// 1
// 2

Repeat while 循环

while 循环的另一种变体 repeat - while 循环,它和 while 循环的主要区别在于,在判断循环条件之前,repeat 循环会先执行一次循环块。然后继续重复循环,直到条件为 false,也就是说 repeat 循环不管条件如何至少执行一次。

在 oc 语言和其他编程语言中,这个方法叫 do - while 循环

typescript 复制代码
var number = 0

repeat {
    print(number)
    number += 1
} while(number < 3)
// 0
// 1
// 2

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

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

相关推荐
kango4 小时前
iOS 远程推送全链路拆解:从 deviceToken 到多账号绑定
ios·app
茶底世界之下12 小时前
仙人掌与沙丘的傍晚:用 Awaking 让侧光有了层次
ios·app·产品
fthux1 天前
总想着“忙完再休息”?让 Tick Rest 提醒你,先歇一会儿
开源·github·mac·swift·提醒·消息提醒·tick rest·tick rest for mac·消息提醒app
ShineWinsu1 天前
对于Qt:QTableWidget常见属性以及QTableWidgetItem类的解析
开发语言·c++·qt·gui·客户端·表格·qtablewidget
ShineWinsu1 天前
对于Qt:QListWidget常见属性以及QListWidgetItem类的解析
开发语言·c++·qt·客户端·列表·qlistwidget·qlistwidgetitem
茶底世界之下1 天前
蓝调鱼市的一盏暖灯:用 Awaking 把冷海与灯光分开
ios·app·产品
ShineWinsu2 天前
对于Qt:QDial常见属性以及信号的解析
开发语言·c++·qt·gui·客户端·旋钮·qdial
茶底世界之下3 天前
窗边白雏菊与旧书:用 Awaking 留住一束暖光
ios·app·产品
东坡肘子3 天前
参与学生移动应用大赛有感 -- 肘子的 Swift 周报 #161
人工智能·swiftui·swift
茶底世界之下3 天前
阴天海边的蓝船:用 Awaking 把灰蓝调成清亮主角
ios·app·产品