Understanding map, flatMap, and compactMap in Swift

Mehrdad Ahmadian
2 min readDec 24, 2023

--

map, flatMap, and compactMap

Swift, Apple’s powerful and intuitive programming language, has a rich set of features that make it a favorite among iOS and macOS developers. Among these features are three higher-order functions that are essential for efficient array manipulation: map, flatMap, and compactMap. In this article, we'll dive into each of these functions, explore their uses, and see them in action with practical examples.

The Power of map

The map function in Swift is a straightforward yet powerful tool for transforming arrays. It takes each element in an array, applies a given function, and returns a new array of the transformed elements.

Example: Squaring Numbers

Consider an array of numbers. If we want to square each number, map makes this process concise and clean.

let numbers = [1, 2, 3, 4, 5]
let squaredNumbers = numbers.map { $0 * $0 }
// squaredNumbers is [1, 4, 9, 16, 25]

Unwrapping Collections with flatMap

While map is great for simple transformations, flatMap shines when dealing with nested arrays or optional values. It not only applies a transformation but also flattens the resulting collections into a single array.

Example: Flattening an Array of Arrays

Imagine you have an array of arrays, and you need to merge them into a single array. flatMap does this elegantly:

let arrayOfArrays = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
let flattenedArray = arrayOfArrays.flatMap { $0 }
// flattenedArray is [1, 2, 3, 4, 5, 6, 7, 8, 9]

Filtering with compactMap

Finally, compactMap is similar to map but with a twist: it removes any nil values from the resulting array. This is especially useful when dealing with optional values.

Example: Converting Strings to Integers

In situations where a conversion might fail (like turning a string into an integer), compactMap ensures that only successful conversions are kept:

let mixedArray = ["1", "two", "3", "four"]
let integersArray = mixedArray.compactMap { Int($0) }
// integersArray is [1, 3]

Conclusion

Understanding when and how to use map, flatMap, and compactMap can significantly enhance your Swift code's readability and efficiency. map is your go-to for simple transformations, flatMap for dealing with nested collections or optionals, and compactMap for filtering out unwanted nil values. Mastering these functions will make your journey with Swift more enjoyable and productive.

--

--

No responses yet