> For the complete documentation index, see [llms.txt](https://3440217568.gitbook.io/rxswift/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://3440217568.gitbook.io/rxswift/decision_tree/flatmap.md).

# flatMap

**将 `Observable` 的元素转换成其他的 `Observable`，然后将这些 `Observables` 合并**

![](/files/-MWlwP8UTqIpHTuMoyee)

**flatMap** 操作符将源 `Observable` 的每一个元素应用一个转换方法，将他们转换成 `Observables`。 然后将这些 `Observables` 的元素合并之后再发送出来。

这个操作符是非常有用的，例如，当 `Observable` 的元素本身拥有其他的 `Observable` 时，你可以将所有**子** `Observables` 的元素发送出来。

## 演示

```swift
let disposeBag = DisposeBag()
let first = BehaviorSubject(value: "👦🏻")
let second = BehaviorSubject(value: "🅰️")
let subject = BehaviorSubject(value: first)

subject.asObservable()
        .flatMap { $0 }
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)

first.onNext("🐱")
subject.onNext(second)
second.onNext("🅱️")
first.onNext("🐶")
```

**输出结果：**

```swift
👦🏻
🐱
🅰️
🅱️
🐶
```
