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