RocketNetworking 0.0.9

RocketNetworking 0.0.9

William Brandin 维护。



  • 作者:
  • willbrandin

Rocket Networking🚀

轻量化协议导向的 Networking 层。通过定义 API 的端点快速开始开发。

安装

依赖管理器

CocoaPods

CocoaPods 是 Cocoa 项目的依赖管理器。您可以使用以下命令安装它

$ gem install cocoapods

要使用 CocoaPods 将 RocketNetworking 集成到您的 Xcode 项目中,请在您的 Podfile 中指定它

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.0'
use_frameworks!
pod 'RocketNetworking'

然后,运行以下命令

$ pod install

设置

定义端点

符合 EndPointType 类型定义的类用于在 Router 中使用 HTTP 请求。所有需要进行编码的对象 必须 符合 Encodable

enum MyAPIEndpoint {
    case getMyEndpoint(id: Int)
    case submitForm(data: MyEncodable)
}
符合EndpointType
extension MyAPIEndpoint: EndPointType {

  var environmentBaseURL: String {
      return "http://staging.my-api-url.net/api"
  }

  var baseURL: URL {
      guard let url = URL(string: environmentBaseURL) else { fatalError("base url could not be config") }
      return url
  }

  var path: String {
      switch self {
      case .getMyEndpoint(id: let id):
          return "/user/info/\(id)"
      case .submitForm:
          return "/message/"
      }
  }

  var httpMethod: HTTPMethod {
      switch self {
      case .getMyEndpoint: return .get
      case .submitForm: return .post
      }
  }

  var task: HTTPTask {
      switch self {
      case .getMyEndpoint(let data):
          return .requestParameters(bodyParameters: data, urlParameters: nil)
      default:
          return .request
      }
  }

  var headers: HTTPHeaders? {
      switch self {
      case .getMyEndpoint:
          return ["hello": "world"]
      default:
          return nil
      }
  }
}

RocketNetworkManager的实例

struct NetworkManager {
    static let sharedInstance = RocketNetworkManager<MyAPIEndpoint>()

    static func setEnvironment(for environment: NetworkEnvironment) {
        NetworkManager.sharedInstance.setupNetworkLayer(in: environment)
    }
}

AppDelegate中进行配置

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    NetworkManger.sharedInstance.setEnvironment(for: .development)
    return true
}

使用

var myNetworkObject: MyObject? // MyObject must conform to Codable
let networkManager = NetworkManager.sharedInstance
let endpoint = MyAPIEndpoint.getMyEndpoint(id: 0)

networkManager.request(for: endpoint, MyObject.self) { result in
    switch result {
    case .success(let httpBodyData):
        print("Data Received 🚀")
        myNetworkObject = httpBodyData
    case .error(let error):
        print(error.localizedDescription)
    }
}