https://github.com/dmitryshlepkin/network-dispatcher
Swift Network Dispatcher
https://github.com/dmitryshlepkin/network-dispatcher
Last synced: 3 months ago
JSON representation
Swift Network Dispatcher
- Host: GitHub
- URL: https://github.com/dmitryshlepkin/network-dispatcher
- Owner: DmitryShlepkin
- License: mit
- Created: 2023-02-01T02:45:16.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2023-02-02T18:15:03.000Z (over 2 years ago)
- Last Synced: 2025-02-18T02:49:47.669Z (3 months ago)
- Language: Swift
- Size: 10.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# NetworkDispatcher
Simple network layer in swift.
## Installation
### In Xcode
To integrate NetworkDispatcher into your Xcode project as Swift package:
1. Select "File -> Add Packages..."
2. Enter "https://github.com/acidbeast/network-dispatcher".
3. Select "Add package".### Swift package manager
Add NetworkDispatcher as a dependancy to your package is easy, just add it to the dependancies value of your Package.swift file.
```swift
dependencies: [
.package(url: "https://github.com/acidbeast/network-dispatcher", .upToNextMajor(from: "1.0.0"))
]
```## Usage
### Create API Client
```swift
import NetworkDispatcherenum SpacexAPI {
case rockets
case launches
}extension SpaceXAPI: APIClient {
var baseURL: URL {
// Can be moved outside into configuration structure or class.
guard let url = URL(string: "https://api.spacexdata.com/v4/") else {
fatalError("URL is not provided")
}
return url
}
var path: String {
switch self {
case .rockets:
return "rockets"
case .launches:
return "rockets"
}
}
var httpMethod: HTTPMethod {
switch self {
case .rockets:
return .get
case .launches:
return .get
}
}
var task: HTTPTask {
switch self {
case .rockets:
return .request
case .launches:
return .request
}
}
var headers: HTTPHeaders? {
return [:]
}
var decoder: JSONDecoder {
// Can be moved outside into configuration structure or class.
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
decoder.dateDecodingStrategy = .formatted(dateFormatter)
return decoder
}
}```
### Making a request
```swift
import NetworkDispatcher// Define data model.
struct Rocket: Decodable {
let name: String
let type: String
}// Create NetworkDispatcher instance.
let dispatcher = NetworkDispatcher()
// Make request
dispatcher.request(.rockets) { result in
dispatcher.handle {
result: result,
onSuccess: { (rockets: [Rocket]) in
print("Success: \(rockets)")
},
onError: {
print("Error: \(error)")
}
}
}```
### Cancel request
```swift
dispatcher.cancel()
```