Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save Czajnikowski/643e37f3c9547604ea2291fd2eb0dba0 to your computer and use it in GitHub Desktop.
Save Czajnikowski/643e37f3c9547604ea2291fd2eb0dba0 to your computer and use it in GitHub Desktop.
import Foundation
import Combine
extension URLSession {
func cacheThenDataTaskPublisher(
for urlRequest: URLRequest
) -> some Publisher {
let cacheDataTaskPublisher = configuration.urlCache?
.cachedResponse(for: urlRequest)
.map {
Just((data: $0.data, response: $0.response)).eraseToAnyPublisher()
} ?? Empty().eraseToAnyPublisher()
return Publishers.Merge(
cacheDataTaskPublisher.mapError { switch $0 {} },
dataTaskPublisher(for: urlRequest)
)
.removeDuplicates(by: { $0.data == $1.data })
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment