Publisher.swift 831 B

123456789101112131415161718192021222324252627282930
  1. import Combine
  2. protocol OptionalType {
  3. associatedtype Wrapped
  4. var optional: Wrapped? { get }
  5. }
  6. extension Optional: OptionalType {
  7. public var optional: Wrapped? { self }
  8. }
  9. extension Publisher where Output: OptionalType {
  10. func ignoreNil() -> AnyPublisher<Output.Wrapped, Failure> {
  11. flatMap { output -> AnyPublisher<Output.Wrapped, Failure> in
  12. guard let output = output.optional else {
  13. return Empty<Output.Wrapped, Failure>(completeImmediately: false).eraseToAnyPublisher()
  14. }
  15. return Just(output).setFailureType(to: Failure.self).eraseToAnyPublisher()
  16. }
  17. .eraseToAnyPublisher()
  18. }
  19. }
  20. extension Publisher {
  21. func combineWithPrevious() -> AnyPublisher<(Output, Output), Failure> {
  22. zip(dropFirst()).eraseToAnyPublisher()
  23. }
  24. }