Swiftly

Swift 5.1 references for busy coders

compactMap

compactMap is a functional method that returns an array that contains the results of mapping a given closure over the elements of a sequence, with the exception that nil results are filtered out. Similar methods are map and flatMap.

compactMap over array of Strings

Here, Int() is an initializer that returns an optional Int: an Int if the string can be converted to one, and nil otherwise. Importantly, the resulting array is of type [Int] (not [Int?]).

let numberStrings = ["1", "2", "3", "four"]
let numbers = numberStrings.compactMap { Int($0) }
print(numbers) // [1, 2, 3]

For reference, here is what would happen if we used map with this example instead:

let numberStrings = ["1", "2", "3", "four"]
let numbers = numberStrings.map { Int($0) }
print(numbers) // [Optional(1), Optional(2), Optional(3), nil]