flatMap(_:)
Returns a new result, mapping any success value using the given transformation and unwrapping the produced result.
Declaration
func flatMap<NewSuccess>(_ transform: (Success) -> Result<NewSuccess, Failure>) -> Result<NewSuccess, Failure> where NewSuccess : ~CopyableParameters
- transform:
A closure that takes the success value of the instance.
Return Value
A Result instance, either from the closure or the previous .failure.
Discussion
Use this method to avoid a nested result when your transformation produces another Result type.
In this example, note the difference in the result of using map and flatMap with a transformation that returns a result type.
func getNextInteger() -> Result<Int, Error> {
.success(4)
}
func getNextAfterInteger(_ n: Int) -> Result<Int, Error> {
.success(n + 1)
}
let result = getNextInteger().map { getNextAfterInteger($0) }
// result == .success(.success(5))
let result = getNextInteger().flatMap { getNextAfterInteger($0) }
// result == .success(5)