# 1. Introduction

Swift's for-in loop allows you to iterate over sequences, such as ranges of numbers, items in an array, or characters in a string. It provides a concise and readable way to run a set of statements for each item in a collection.

# 2. Source Code Example

``````// Looping over an array of integers
let numbers = [1, 2, 3, 4, 5]
for number in numbers {
print("\(number) times 2 is \(number * 2)")
}

// Looping over a dictionary
let fruitColors = ["apple": "red", "banana": "yellow", "grape": "purple"]
for (fruit, color) in fruitColors {
print("The color of \(fruit) is \(color)")
}

// Looping over a range
for i in 1...5 {
print("The square of \(i) is \(i * i)")
}

// Looping over a string's characters
let greeting = "Hello"
for char in greeting {
print(char)
}
``````

### Output:

```1 times 2 is 2
2 times 2 is 4
3 times 2 is 6
4 times 2 is 8
5 times 2 is 10
The color of apple is red
The color of banana is yellow
The color of grape is purple
The square of 1 is 1
The square of 2 is 4
The square of 3 is 9
The square of 4 is 16
The square of 5 is 25
H
e
l
l
o
```

# 3. Step By Step Explanation

1. Looping over Arrays: We create an array named numbers and then use a for-in loop to iterate over each integer. Inside the loop, we print the number, and it's double.

2. Looping over Dictionaries: The fruitColors dictionary associates fruits with their respective colors. With the for-in loop, we can destructure the dictionary items into (key, value) pairs. This allows us to access both the fruit's name and its color within the loop.

3. Looping over Ranges: Swift lets you create numerical ranges with ease. In this example, we iterate over the numbers 1 through 5, printing each number's square.

4. Looping over Strings: Strings are sequences of characters. This means we can use a for-in loop to iterate over each character in a string. We demonstrate this by looping through the greeting string and printing each character on a new line.

Swift's for-in loop is a powerful tool that offers a streamlined way to iterate over various collections and sequences. Its adaptability makes it an essential part of the language for tasks ranging from simple iterations to more complex data manipulation.