mirror of
https://github.com/ivanvorobei/SwiftUI.git
synced 2026-03-17 23:13:58 +01:00
Add examples project
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
import SwiftUI
|
||||
import Combine
|
||||
|
||||
enum RequestError: Error {
|
||||
case request(code: Int, error: Error?)
|
||||
case unknown
|
||||
}
|
||||
|
||||
extension URLSession {
|
||||
func send(request: URLRequest) -> AnyPublisher<(data: Data, response: HTTPURLResponse), RequestError> {
|
||||
AnyPublisher<(data: Data, response: HTTPURLResponse), RequestError> { subscriber in
|
||||
let task = self.dataTask(with: request) { data, response, error in
|
||||
DispatchQueue.main.async {
|
||||
let httpReponse = response as? HTTPURLResponse
|
||||
if let data = data, let httpReponse = httpReponse, 200..<300 ~= httpReponse.statusCode {
|
||||
_ = subscriber.receive((data, httpReponse))
|
||||
subscriber.receive(completion: .finished)
|
||||
}
|
||||
else if let httpReponse = httpReponse {
|
||||
subscriber.receive(completion: .failure(.request(code: httpReponse.statusCode, error: error)))
|
||||
}
|
||||
else {
|
||||
subscriber.receive(completion: .failure(.unknown))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
subscriber.receive(subscription: AnySubscription(task.cancel))
|
||||
task.resume()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension JSONDecoder: TopLevelDecoder {}
|
||||
Reference in New Issue
Block a user