---
title: "zip(_:_:)"
framework: combine
role: symbol
role_heading: Instance Method
path: "combine/publisher/zip(_:_:)-4xn21"
---

# zip(_:_:)

Combines elements from another publisher and delivers a transformed output.

## Declaration

```swift
func zip<P, T>(_ other: P, _ transform: @escaping (Self.Output, P.Output) -> T) -> Publishers.Map<Publishers.Zip<Self, P>, T> where P : Publisher, Self.Failure == P.Failure
```

## Parameters

- `other`: Another publisher.
- `transform`: A closure that receives the most-recent value from each publisher and returns a new value to publish.

## Return Value

Return Value A publisher that uses the transform closure to emit new elements, produced by combining the most recent value from two upstream publishers.

## Discussion

Discussion Use zip(_:_:) to return a new publisher that combines the elements from two publishers using a transformation you specify to publish a new value to the downstream.  The returned publisher waits until both publishers have emitted an event, then delivers the oldest unconsumed event from each publisher together that the operator uses in the transformation. In this example, PassthroughSubject instances numbersPub and lettersPub emit values; zip(_:_:) receives the oldest value from each publisher, uses the Int from numbersPub and publishes a string that repeats the String from lettersPub that many times. let numbersPub = PassthroughSubject<Int, Never>() let lettersPub = PassthroughSubject<String, Never>() cancellable = numbersPub     .zip(lettersPub) { anInt, aLetter in         String(repeating: aLetter, count: anInt)     }     .sink { print("\($0)") } numbersPub.send(1)     // numbersPub: 1      lettersPub:       zip output: <none> numbersPub.send(2)     // numbersPub: 1,2    lettersPub:       zip output: <none> numbersPub.send(3)     // numbersPub: 1,2,3  lettersPub:       zip output: <none> lettersPub.send("A")   // numbersPub: 1,2,3  lettersPub: "A"   zip output: "A" lettersPub.send("B")   // numbersPub: 2,3    lettersPub: "B"   zip output: "BB" // Prints: //  A //  BB If either upstream publisher finishes successfully or fails with an error, the zipped publisher does the same.

## See Also

### Collecting and republishing the oldest unconsumed elements from multiple publishers

- [zip(_:)](combine/publisher/zip(_:).md)
- [zip(_:_:)](combine/publisher/zip(_:_:)-8d7k7.md)
- [zip(_:_:_:)](combine/publisher/zip(_:_:_:)-9yqi1.md)
- [zip(_:_:_:)](combine/publisher/zip(_:_:_:)-16rcy.md)
- [zip(_:_:_:_:)](combine/publisher/zip(_:_:_:_:).md)
