With Swift, ranges are an excellent tool that can be used to work with arrays to perform complex operations with ease. Ranges can help reduce and simplify the work and code involved. In this post, we will explain what ranges are in Swift, the types of ranges, and how to use them with relevant examples. Let’s begin!
A Swift range is a range operator. In a range, we define two values which can be compared against one another, such as integers or characters. Ranges are an excellent way to set up an array with ease.
Writing a Swift range is easy! We begin with the lower bound value, insert “…”, and end with an upper bound value. The “…” is an operator that includes the upper and lower limits of the range.
Let’s look at a range of integers:
//Creating a range from 1 to 10 let basicRange10 = 1...10 for i in basicRange10 { print(i) }
Output:
1 2 3 4 5 6 7 8 9 10
Notice how we use the “…” operator to define a range of integers from 1 to 10. In this example, we iterated the range over a for loop and printed each integer value.
What if we wanted to iterate over a range of array items?
//Printing only array items in the range let groceryList = ["apple","bananas","bread","milk","peanut butter"] print(groceryList[2...4])
Output:
["bread", "milk", "peanut butter"]
Even though the array index begins at 0, the range begins at 1. This is the reason why the output was not [“bananas”, “bread”, “milk”]
Now that we have a basic understanding of Swift ranges, let’s look at the different types. There are 3 types of Swift ranges:
A closed range operator (a. . .b) is a range that includes your two lower and upper end values. We use the “…” operator as seen in the previous two examples.
Closed range operator example:
//Print even numbers let twentyToThirty = 20...30 for i in twentyToThirty { if( i % 2 == 0){ print(i) } }
Output:
20 22 24 26 28 30
Our lower and upper values are printed out as expected when using a closed range operator.
A half open range operator (a. . <b) is a range that includes the lower range value but excludes the upper range value. This is useful in arrays where you are counting up to the length of the array but not including the length of the array.
Let’s look at an example where someone scored the end value of a half open range:
//What if someone scored the upper range value of a half open range? let passingRange = 0..<60 if( passingRange.contains(60)){ print("60 is a passing score") }else { print("60 is not a passing score") }
Output:
60 is not a passing score
Thus, if someone scored a 60, it would not be considered a passing score if the test used a half open range instead of a closed range.
Lastly, we have the one-sided Swift range operator which can use “. . .” or the “. . <” operator with no lower or upper bound.
Let’s go back to our closed range example and make it one-sided:
//What would happen if we had no upper bound? let twentyToDotDotDot = 20... for i in twentyToDotDotDot { if( i % 2 == 0){ print(i) } }
We would see the wheel of death in our Playground app because we would try to find all the even numbers from 20 to infinity.
And, there you have it! An introduction to Swift ranges. But we are only scratching the surface of the true power and versatility of Swift ranges. Interested in learning more? Explore concepts such as converting, inspecting, clamping, and checking for containment of ranges at the Apple developer page, or become an iOS Developer with Udacity’s Nanodegree program. Happy coding!
Announcing iOS Development with SwiftUI and SwiftData The demand for iOS developers proficient in Swift…
In a world driven by technology, finding the right opportunity to break into the tech…
This month, more than 1,000 people received notifications of their free enrollment in the AI…
Developers & IT Pros are harnessing the power of Google Cloud to solve real-world problems.…
From Weekend Projects to Web3's Next Big Thing Ready to help shape the future of…
It might be obvious by now, but here at Udacity, we really love tech and…