---
title: "flatMap(_:)"
framework: swift
role: symbol
role_heading: Instance Method
path: "swift/result/flatmap(_:)"
---

# flatMap(_:)

Returns a new result, mapping any success value using the given transformation and unwrapping the produced result.

## Declaration

```swift
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

Return Value A Result instance, either from the closure or the previous .failure.

## Discussion

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

- [map(_:)](swift/result/map(_:).md)
- [mapError(_:)](swift/result/maperror(_:).md)
- [flatMapError(_:)](swift/result/flatmaperror(_:).md)
