Swift version: 5.10
The flatMap()
method of optionals allows you to transform the optional if it has a value, or do nothing if it is empty. This makes for shorter and more expressive code than doing a regular unwrap, and doesn’t require you to change your data type.
Using flatMap()
with optionals is similar to using map()
, with one important difference: if your transformation closure returns an optional, flatMap()
will combine that optional with the existing optional, whereas map()
will keep them both.
Here’s a practical example so you can see the difference:
let stringNumber: String? = "5"
let intNumber = stringNumber.map { Int($0) }
When that code runs, intNumber
will be an Int??
– an optional optional integer. This is because we already have optionality from stringNumber
, and the Int
initializer from a string also returns an optional, so map()
just puts them together.
In comparison, flatMap()
acts differently:
let flatMapNumber = stringNumber.flatMap { Int($0) }
That will return a regular Int?
, meaning that either the whole thing exists or nothing exists – it’s easier to work with.
SPONSORED Join a FREE crash course for mid/senior iOS devs who want to achieve an expert level of technical and practical skills – it’s the fast track to being a complete senior developer! Hurry up because it'll be available only until February 9th.
Sponsor Hacking with Swift and reach the world's largest Swift community!
Available from iOS – learn more in my book Pro Swift
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.
Link copied to your pasteboard.