Contents

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 : ~Copyable

Parameters

  • 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)

See Also

Transforming a Result