🚀 Booster
作者:godpp
简介
- Booster 是在 NAVER Connect Foundation 的 BoostCamp 3rd iOS Process 期间开发的。
- Booster 是一个用 Swift 编写的简单 HTTP 网络库。
- Booster 仅使用苹果框架进行创建。
UML
安装
Cocoapods
pod 'Booster'
用法
首先,您应该定义一个枚举类型的 API 端点。
enum BoosterAPI {
case fetchLiquidOxygen(type: String, quantity: Int)
}
其次,您应该为实际需求实现这些要求的 BoostService 协议。
extension BoosterAPI: BoosterService {
var baseURL: URL {
guard let url = URL(string: BaseURL.BoosterAPI) else {
fatalError("Invalid URL")
}
return url
}
var path: String? {
switch self {
case .fetchLiquidOxygen:
return "/fuel"
}
}
var method: HTTPMethod {
switch self {
case .fetchLiquidOxygen:
return .get
}
}
var parameters: Parameters {
switch self {
case .fetchLiquidOxygen(let type, let quantity):
return ["type": type, "quantity": quantity]
}
}
var task: HTTPTask {
switch self {
case .fetchLiquidOxygen:
return .requestWith(url: parameters, body: nil, encoding: .query)
}
}
var header: HTTPHeader? {
return nil
}
}
然后,您应该实现具有路由器的 BoostManager 并定义静态方法。
final class BoosterManager {
static func fetchLiquidOxygen(type: String, quantity: Int, completion: @escaping (Result<BoosterModel>) -> Void) {
BoosterCenter<BoosterAPI>().request(.fetchLiquidOxygen(
type: type,
quantity: quantity
)) { (data, error) in
guard error == nil else {
return completion(Result.failure(error!))
}
guard let responseData = data else { return }
do {
let resultData = try JSONDecoder().decode(BoosterModel.self, from: responseData)
completion(Result.success(resultData))
} catch {
completion(Result.failure(BoosterError.decodingFail))
}
}
}
}
最后,您可以像这样访问 API
BoosterManager.fetchLiquidOxygen(type: type, quantity: quantity) { result in
switch result {
case .success(let resultData):
// do something with response data
case .failure(let error):
print(error.localizedDescription)
}
}