enum APIError: Error {
case invalidBody
case invalidEndpoint
case invalidURL
case emptyData
case invalidJSON
case invalidResponse
case statusCode(Int)
}
import UIKit
import Foundation
import Combine
class Publishers:UIViewController {
static func api(url:String) throws -> URLSession.DataTaskPublisher {
let headers = [ "Content-Type": "application/json",
"cache-control": "no-cache" ]
// let encoder = JSONEncoder()
guard let url = URL(string: url ) else {
throw APIError.invalidEndpoint
}
var request = URLRequest(url: url, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers
// if model != nil{
// guard let postData = try? encoder.encode(model.self) else {
// throw APIError.invalidBody
// }
// request.httpBody = postData as Data
// }
let session = URLSession.shared
return session.dataTaskPublisher(for: request)
}
}
//MARK: View Controller
let postUserPublisher = try ! Publishers.api( url: "http://dummy.restapiexample.com/api/v1/employees")
func getData(){
let publisher = postUserPublisher
.map({$0})
.receive(on: RunLoop.main)
.sink(receiveCompletion: { (completionError) in
switch completionError {
case .failure(let error):
print(error.localizedDescription)
case .finished:
break
}
}) { (data) in
self.data = try? JSONDecoder().decode(Welcome.self, from: data.data)
self.tblVw.reloadData()
}
}