Skip to content

Instantly share code, notes, and snippets.

@BrunoCerberus
Last active July 30, 2023 15:41
Show Gist options
  • Save BrunoCerberus/d2a2b400ddc9a9fb6fa86ab5fdaf4645 to your computer and use it in GitHub Desktop.
Save BrunoCerberus/d2a2b400ddc9a9fb6fa86ab5fdaf4645 to your computer and use it in GitHub Desktop.
Network-Combine
import Combine
import Foundation
// As any Publisher
func fetchMovies() -> AnyPublisher<MovieResponse, Error> {
let url = URL(string: "https://api.themoviedb.org/3/movie/upcoming?api_key=123")!
return URLSession
.shared
.dataTaskPublisher(for: url)
.map(\.data)
// .tryMap { data in
// let decoded = try jsonDecoder.decode(MovieResponse.self, from: data)
// return decoded
// }
.decode(type: MovieResponse.self, decoder: JSONDecoder())
.eraseToAnyPublisher()
}
// As some Publisher
func searchMovies(for query: String) -> some Publisher<MovieResponse, Error> {
let encodedQuery = query.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
let url = URL(string: "https://api.themoviedb.org/3/search/movie?api_key=\(apiKey)&query=\(encodedQuery!)")!
return URLSession
.shared
.dataTaskPublisher(for: url)
.map { $0.data }
.decode(type: MovieResponse.self, decoder: jsonDecoder)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment