> 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/zip.md).

# zip

**通过一个函数将多个 `Observables` 的元素组合起来，然后将每一个组合的结果发出来**

![](/files/-MWlwOvFwp_hQGivJByw)

**zip** 操作符将多个(最多不超过8个) `Observables` 的元素通过一个函数组合起来，然后将这个组合的结果发出来。它会严格的按照序列的索引数进行组合。例如，返回的 `Observable` 的第一个元素，是由每一个源 `Observables` 的第一个元素组合出来的。它的第二个元素 ，是由每一个源 `Observables` 的第二个元素组合出来的。它的第三个元素 ，是由每一个源 `Observables` 的第三个元素组合出来的，以此类推。它的元素数量等于源 `Observables` 中元素数量最少的那个。

## 演示

```swift
let disposeBag = DisposeBag()
let first = PublishSubject<String>()
let second = PublishSubject<String>()

Observable.zip(first, second) { $0 + $1 }
          .subscribe(onNext: { print($0) })
          .disposed(by: disposeBag)

first.onNext("1")
second.onNext("A")
first.onNext("2")
second.onNext("B")
second.onNext("C")
second.onNext("D")
first.onNext("3")
first.onNext("4")
```

**输出结果：**

```swift
1A
2B
3C
4D
```
