---
title: share()
framework: combine
role: symbol
role_heading: Instance Method
path: combine/publisher/share()
---

# share()

Shares the output of an upstream publisher with multiple subscribers.

## Declaration

```swift
func share() -> Publishers.Share<Self>
```

## Return Value

Return Value A class instance that shares elements received from its upstream to multiple subscribers.

## Discussion

Discussion The publisher returned by this operator supports multiple subscribers, all of whom receive unchanged elements and completion states from the upstream publisher. tip: Publishers.Share is effectively a combination of the Publishers.Multicast and PassthroughSubject publishers, with an implicit autoconnect(). The following example uses a sequence publisher as a counter to publish three random numbers, generated by a map(_:) operator. It uses a share() operator to share the same random number to each of two subscribers. This example uses a delay(for:tolerance:scheduler:options:) operator only to prevent the first subscriber from exhausting the sequence publisher immediately; an asynchronous publisher wouldn’t need this. let pub = (1...3).publisher     .delay(for: 1, scheduler: DispatchQueue.main)     .map( { _ in return Int.random(in: 0...100) } )     .print("Random")     .share()

cancellable1 = pub     .sink { print ("Stream 1 received: \($0)")} cancellable2 = pub     .sink { print ("Stream 2 received: \($0)")}

// Prints: // Random: receive value: (20) // Stream 1 received: 20 // Stream 2 received: 20 // Random: receive value: (85) // Stream 1 received: 85 // Stream 2 received: 85 // Random: receive value: (98) // Stream 1 received: 98 // Stream 2 received: 98 Without the share() operator, stream 1 receives three random values, followed by stream 2 receiving three different random values. Also note that Publishers.Share is a class rather than a structure like most other publishers. This means you can use this operator to create a publisher instance that uses reference semantics.

## See Also

### Working with multiple subscribers

- [multicast(_:)](combine/publisher/multicast(_:).md)
- [multicast(subject:)](combine/publisher/multicast(subject:).md)
