<!--
{
  "availability" : [
    "iOS: 13.0.0 -",
    "iPadOS: 13.0.0 -",
    "macCatalyst: 13.0.0 -",
    "macOS: 10.15.0 -",
    "tvOS: 13.0.0 -",
    "visionOS: 1.0.0 -",
    "watchOS: 6.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "Swift",
  "identifier" : "/documentation/Swift/Optional/Publisher-swift.struct",
  "metadataVersion" : "0.1.0",
  "role" : "Structure",
  "symbol" : {
    "kind" : "Structure",
    "modules" : [
      "Swift"
    ],
    "preciseIdentifier" : "s:Sq7CombineE9PublisherV"
  },
  "title" : "Optional.Publisher"
}
-->

# Optional.Publisher

The type of a Combine publisher that publishes the value of a Swift optional instance to each subscriber exactly once, if the instance has any value at all.

```
struct Publisher
```

## Overview

In contrast with the <doc://com.apple.documentation/documentation/Combine/Just> publisher, which always produces a single value, this publisher might not send any values and instead finish normally, if [`output`](/documentation/Swift/Optional/Publisher-swift.struct/output-swift.property) is `nil`.

## Topics

### Declaring Publisher Topography

[`typealias Output`](/documentation/Swift/Optional/Publisher-swift.struct/Output-swift.typealias)

The kind of value published by this publisher.

[`typealias Failure`](/documentation/Swift/Optional/Publisher-swift.struct/Failure)

The kind of error this publisher might publish.

### Creating an Optional Publisher

[`init(Optional<Wrapped>.Publisher.Output?)`](/documentation/Swift/Optional/Publisher-swift.struct/init(_:))

Creates a publisher to emit the value of the optional, or to finish immediately if the optional doesn’t have a value.

### Inpsecting Publisher Properties

[`let output: Optional<Wrapped>.Publisher.Output?`](/documentation/Swift/Optional/Publisher-swift.struct/output-swift.property)

The output to deliver to each subscriber.

### Working with Subscribers

[`func receive<S>(subscriber: S)`](/documentation/Swift/Optional/Publisher-swift.struct/receive(subscriber:))

Implements the Publisher protocol by accepting the subscriber and immediately publishing the optional’s value if it has one, or finishing normally if it doesn’t.

### Instance Methods

[`func allSatisfy((Optional<Wrapped>.Publisher.Output) -> Bool) -> Optional<Bool>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/allSatisfy(_:))

[`func collect() -> Optional<[Optional<Wrapped>.Publisher.Output]>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/collect())

[`func compactMap<T>((Optional<Wrapped>.Publisher.Output) -> T?) -> Optional<T>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/compactMap(_:))

[`func contains(Optional<Wrapped>.Publisher.Output) -> Optional<Bool>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/contains(_:))

[`func contains(where: (Optional<Wrapped>.Publisher.Output) -> Bool) -> Optional<Bool>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/contains(where:))

[`func count() -> Optional<Int>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/count())

[`func drop(while: (Optional<Wrapped>.Publisher.Output) -> Bool) -> Optional<Wrapped>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/drop(while:))

[`func dropFirst(Int) -> Optional<Wrapped>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/dropFirst(_:))

[`func filter((Optional<Wrapped>.Publisher.Output) -> Bool) -> Optional<Wrapped>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/filter(_:))

[`func first() -> Optional<Wrapped>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/first())

[`func first(where: (Optional<Wrapped>.Publisher.Output) -> Bool) -> Optional<Wrapped>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/first(where:))

[`func ignoreOutput() -> Empty<Optional<Wrapped>.Publisher.Output, Optional<Wrapped>.Publisher.Failure>`](/documentation/Swift/Optional/Publisher-swift.struct/ignoreOutput())

[`func last() -> Optional<Wrapped>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/last())

[`func last(where: (Optional<Wrapped>.Publisher.Output) -> Bool) -> Optional<Wrapped>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/last(where:))

[`func map<T>((Optional<Wrapped>.Publisher.Output) -> T) -> Optional<T>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/map(_:))

[`func max() -> Optional<Wrapped>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/max())

[`func max(by: (Optional<Wrapped>.Publisher.Output, Optional<Wrapped>.Publisher.Output) -> Bool) -> Optional<Wrapped>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/max(by:))

[`func min() -> Optional<Wrapped>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/min())

[`func min(by: (Optional<Wrapped>.Publisher.Output, Optional<Wrapped>.Publisher.Output) -> Bool) -> Optional<Wrapped>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/min(by:))

[`func output(at: Int) -> Optional<Wrapped>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/output(at:))

[`func output<R>(in: R) -> Optional<Wrapped>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/output(in:))

[`func prefix(Int) -> Optional<Wrapped>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/prefix(_:))

[`func prefix(while: (Optional<Wrapped>.Publisher.Output) -> Bool) -> Optional<Wrapped>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/prefix(while:))

[`func reduce<T>(T, (T, Optional<Wrapped>.Publisher.Output) -> T) -> Optional<T>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/reduce(_:_:))

[`func removeDuplicates() -> Optional<Wrapped>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/removeDuplicates())

[`func removeDuplicates(by: (Optional<Wrapped>.Publisher.Output, Optional<Wrapped>.Publisher.Output) -> Bool) -> Optional<Wrapped>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/removeDuplicates(by:))

[`func replaceEmpty(with: Optional<Wrapped>.Publisher.Output) -> Just<Wrapped>`](/documentation/Swift/Optional/Publisher-swift.struct/replaceEmpty(with:))

[`func replaceError(with: Optional<Wrapped>.Publisher.Output) -> Optional<Optional<Wrapped>.Publisher.Output>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/replaceError(with:))

[`func retry(Int) -> Optional<Wrapped>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/retry(_:))

[`func scan<T>(T, (T, Optional<Wrapped>.Publisher.Output) -> T) -> Optional<T>.Publisher`](/documentation/Swift/Optional/Publisher-swift.struct/scan(_:_:))

## Relationships

### Conforms To

[`Publisher`](/documentation/Combine/Publisher)

[`Equatable`](/documentation/Swift/Equatable)

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)