CombineExpanded
Package that extends Combine with some useful APIs.
New API:
- then
- shareReplay
- Future.deferred
then
Wait for completion of self, then forward all events from next. All values sent from self are ignored.
let publisher1 = Future<Int, Never>.deferred { future in
    future(.success(1))
}.handleEvents(receiveCompletion: { _ in
    print("completed 1")
})
let publisher2 = Future<Int, Never>.deferred { future in
    future(.success(2))
}.handleEvents(receiveCompletion: { _ in
    print("completed 2")
})
publisher1.then(publisher2)
    .sink {
        print($0)
    }
// output: 
// completed 1
// 2
// completed 2
shareReplay
Creates a new Publisher that will multicast values emitted by the underlying publisher, up to bufferSize. All clients of this Publiher will see the same version of the emitted values/errors.
The underlying Publisher will not be started until self is started for the first time. When subscribing to this producer, all previous values (up to bufferSize) will be emitted, followed by any new values.
let publisher = Future<Void, Never>.deferred { future in
    print("started")
    future(.success(()))
}.shareReplay(1)
publisher
    .sink(receiveCompletion: { _ in },
          receiveValue: {})
    .store(in: &cancellables)
publisher
    .sink(receiveCompletion: { _ in },
          receiveValue: {})
    .store(in: &cancellables)
// output:
// started
Future.deferred
Delays Future start until it is subscribed.
let future = Future<Void, Error>.deferred { future in
    print("started")
    future(.success(()))
}
print("before")
future.sink(receiveCompletion: { _ in },
            receiveValue: { _ in })
    .store(in: &cancellable)
print("after")
// output:
// before
// started
// after
 
             
             
            