Booster 0.1.0

Booster 0.1.0

Sung.J.Park 维护。



Booster 0.1.0

  • 作者:
  • godpp

🚀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)
    }
}