Skip to main content

Swift For Loop

Introduction​

The for loop is one of the most common control flow statements in Swift programming. It allows you to execute a block of code repeatedly for a specified number of times or to iterate through elements in a collection such as arrays, dictionaries, ranges, and strings. For loops in Swift are designed to be safe and efficient, helping you avoid common programming errors like off-by-one errors or index out-of-bounds exceptions.

In this tutorial, we'll explore how to use for loops in Swift, starting with the basics and moving on to more advanced use cases.

Basic For Loop Syntax​

The most common form of a for loop in Swift uses the for-in syntax to iterate over a sequence:

swift
for item in sequence {
// Code to be executed for each item
}

Where:

  • item is a constant that represents the current element in each iteration
  • sequence is a collection or range to iterate through

Iterating Through Ranges​

Closed Range Operator​

Swift provides a convenient way to iterate through a range of numbers using the closed range operator (...):

swift
// Print numbers from 1 to 5
for number in 1...5 {
print(number)
}

Output:

1
2
3
4
5

Half-Open Range Operator​

If you want to exclude the upper bound, you can use the half-open range operator (..<):

swift
// Print numbers from 1 to 4
for number in 1..<5 {
print(number)
}

Output:

1
2
3
4

One-Sided Range​

Swift also supports one-sided ranges for when you want to iterate from a value to the end of a collection:

swift
let names = ["Anna", "Brian", "Craig", "Donna", "Eric"]

// Iterate from index 2 to the end
for name in names[2...] {
print(name)
}

Output:

Craig
Donna
Eric

Or from the beginning up to a certain index:

swift
// Iterate from the beginning to index 2
for name in names[..<3] {
print(name)
}

Output:

Anna
Brian
Craig

Iterating Through Collections​

Arrays​

swift
let fruits = ["Apple", "Banana", "Orange", "Mango", "Strawberry"]

for fruit in fruits {
print("I like \(fruit)s")
}

Output:

I like Apples
I like Bananas
I like Oranges
I like Mangos
I like Strawberrys

Dictionaries​

When you iterate through a dictionary, each item is returned as a key-value tuple:

swift
let studentScores = ["John": 85, "Emma": 92, "Michael": 78, "Sophia": 95]

for (name, score) in studentScores {
print("\(name) scored \(score) points")
}

Output:

John scored 85 points
Emma scored 92 points
Michael scored 78 points
Sophia scored 95 points

Strings​

You can iterate through the characters in a string:

swift
let greeting = "Hello"

for character in greeting {
print(character)
}

Output:

H
e
l
l
o

Using Enumerated()​

Sometimes you need to know the index of each element while iterating. The enumerated() method provides both the index and the value:

swift
let planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter"]

for (index, planet) in planets.enumerated() {
print("Planet \(index + 1): \(planet)")
}

Output:

Planet 1: Mercury
Planet 2: Venus
Planet 3: Earth
Planet 4: Mars
Planet 5: Jupiter

Conditional Iterations​

Using where Clause​

You can add a where clause to filter iterations:

swift
// Print only even numbers
for number in 1...10 where number % 2 == 0 {
print(number)
}

Output:

2
4
6
8
10

Stride Function​

If you want to iterate with a specific step size, you can use the stride(from:to:by:) function:

swift
// Count from 0 to 10 by 2
for i in stride(from: 0, to: 11, by: 2) {
print(i)
}

Output:

0
2
4
6
8
10

Note that stride(from:to:by:) doesn't include the upper bound. If you want to include the upper bound, use stride(from:through:by:):

swift
// Count down from 10 to 1 with a step of -2
for i in stride(from: 10, through: 1, by: -2) {
print(i)
}

Output:

10
8
6
4
2

Ignoring the Loop Variable​

If you don't need the current value in the loop iteration, you can use the underscore (_):

swift
// Print "Hello!" 5 times
for _ in 1...5 {
print("Hello!")
}

Output:

Hello!
Hello!
Hello!
Hello!
Hello!

Practical Examples​

Example 1: Calculating Factorial​

swift
func factorial(of number: Int) -> Int {
var result = 1
for i in 1...number {
result *= i
}
return result
}

let number = 5
let factorialResult = factorial(of: number)
print("Factorial of \(number) is \(factorialResult)")

Output:

Factorial of 5 is 120

Example 2: Building a Multiplication Table​

swift
func multiplicationTable(for number: Int, upto range: Int) {
print("Multiplication table for \(number):")
for i in 1...range {
print("\(number) × \(i) = \(number * i)")
}
}

multiplicationTable(for: 7, upto: 5)

Output:

Multiplication table for 7:
7 × 1 = 7
7 × 2 = 14
7 × 3 = 21
7 × 4 = 28
7 × 5 = 35

Example 3: Finding Prime Numbers​

swift
func isPrime(_ number: Int) -> Bool {
guard number > 1 else { return false }

// Check if number is divisible by any integer from 2 to sqrt(number)
for divisor in 2..<Int(Double(number).squareRoot()) + 1 {
if number % divisor == 0 {
return false
}
}
return true
}

print("Prime numbers between 1 and 20:")
for number in 1...20 {
if isPrime(number) {
print(number, terminator: " ")
}
}

Output:

Prime numbers between 1 and 20:
2 3 5 7 11 13 17 19

Summary​

The for loop in Swift provides a powerful and flexible way to iterate through ranges and collections. Here's what we've covered:

  • Basic for-in loop syntax
  • Iterating through ranges using closed range (...), half-open range (..<), and one-sided ranges
  • Iterating through collections like arrays, dictionaries, and strings
  • Using enumerated() to access both index and value
  • Filtering iterations with the where clause
  • Using stride() to iterate with specific steps
  • Ignoring loop variables with underscore (_)
  • Real-world applications and examples

For loops are a fundamental part of Swift programming and are essential for tasks ranging from simple repetition to complex data processing.

Exercises​

  1. Write a for loop that prints the first 10 Fibonacci numbers.
  2. Create a function that uses a for loop to reverse a string.
  3. Write a program that finds all numbers between 1 and 100 that are divisible by both 3 and 5.
  4. Use a for loop to convert an array of strings to an array of their lengths.
  5. Implement a function that uses a for loop to find the smallest and largest values in an array of integers.

Additional Resources​



If you spot any mistakes on this website, please let me know at feedback@compilenrun.com. I’d greatly appreciate your feedback! :)