for

常见通过索引遍历的,都是针对有序的,数组和字符串

概览:

1、没有单独for

2、for..in

2、for...each

1、没有单独的for遍历

Q:为什么没有像C 语言那样的for的索引方式遍历呢?

A: 因为在for...in 里面有更加简单的方式使用索引和对应的值了,所以这个单独的方式没有必要了。

2、for..in 遍历

2.1 遍历有序集合

1)直接遍历值

let array = ["苹果", "香蕉", "橘子"]
for fruit in array {
    print(fruit)
}

2)通过索引遍历值

let array = ["苹果", "香蕉", "橘子"]
for i in 0..<array.count {
    print("第 \(i) 个元素是 \(array[i])")
}

3)同时获取索引和元素 ,使用 enumerated()

let array = ["苹果", "香蕉", "橘子"]
for (index, fruit) in array.enumerated() {
    print("第 \(index) 个元素是 \(fruit)")
}

4)范围遍历(Range)

使用 for-in 结合范围操作符来遍历数值区间。

for number in 1...5 {
    print(number)
}

# 如果不想包括上限,可以使用半开区间 ..<
for number in 1..<5 {
    print(number)
}

5)步长遍历索引 stride(from:to:by:)

按一定步长遍历索引,从而访问特定索引位置的元素。

let array = ["A", "B", "C", "D", "E"]
for i in stride(from: 0, to: array.count, by: 2) {
    print("第 \(i) 个元素是 \(array[i])")
}

2.2便利无序集合

1) 遍历字典(无序集合)

let fruits = ["苹果": 5, "香蕉": 3, "橘子": 8]
for (fruit, quantity) in fruits {
    print("\(fruit): \(quantity)个")
}

3、forEach方法

数组、字典等集合类型还支持 forEach 方法,允许你通过闭包遍历集合的每个元素。

let array = ["苹果", "香蕉", "橘子"]
array.forEach { fruit in
    print(fruit)
}


Q: 有了for.in 为什么还需要forEach?

A: forEach 语法更加简洁,尤其在简单的遍历操作中十分常用。

Q: 如果这样,那么单独的for也不应该去掉?

A:

1、for和for..in 是包含关系,并且for..in比for更加简洁, for..in 可以索引遍历,可以索引+值遍历。

2、for..in和forEach没有包含关系,for..in替代我们传统的for遍历,而forEach是更加适应了函数式链式编程,更加简洁的高阶函数。

for..in 和forEach在语法、用法 各有不同:

1. 简洁性和函数式编程风格

forEach 是 Swift 中函数式编程的一部分。

它使用闭包来处理集合中的每个元素,代码更简洁并且符合函数式编程的风格。

相比于 for-inforEach 可以在一行代码中完成遍历,尤其适合简单的操作。

在某些场景下更符合现代编程的简洁需求,特别是在处理链式操作时。

let array = ["苹果", "香蕉", "橘子"]
array.forEach { print($0) }

2. 无返回值和不可提前退出

forEach 不允许 breakcontinue,即你无法在中途停止循环。

for..in 适合中间有判断退出停止循环

forEach 不需要跳出的场景

// 这段代码会报错,因为 forEach 不允许 break
array.forEach { fruit in
    if fruit == "香蕉" {
        break // 错误:forEach 中不能使用 break
    }
}
for fruit in array {
    if fruit == "香蕉" {
        break // 可以中途退出
    }
}

3. 更适合链式调用

forEach 常用于与其他函数式方法(如 mapfilter)结合使用,使代码看起来更加流畅和易读。

let numbers = [1, 2, 3, 4]
numbers.filter { $0 % 2 == 0 }.forEach { print($0) }

4. 代码风格选择

选择 for-inforEach 很大程度上取决于个人偏好和代码风格。对于一些开发者来说,for-in 更加直观和可读,尤其是在处理复杂逻辑时。而 forEach 更适合需要简洁代码的场景。

总结:

  • for-in:适合需要控制流(如 breakcontinue)的场景,更传统,灵活性高。

  • forEach:适合简洁的遍历操作,尤其是函数式编程风格和链式调用,不允许中途退出循环。

Last updated