网上搜了一堆Moya框架的使用,基本都是case的方式,本人觉得使用起来不太方便(轻喷),于是自己封装了一个。代码如下:
//
// NetWorkUtil.swift
// Created by 墨泉
//
import Moya
import SwiftyJSON
class NetWorkUtil {
fileprivate var requestPath: String = "" //请求接口
fileprivate var requestMethod: Moya.Method = .post //请求方式
fileprivate var parameters: [String: Any] = [:] //请求参数
fileprivate let encoding = JSONEncoding.default //请求编码,根据实际需求自行更改
init() {
}
// 网络请求,返回成功和失败结果
public func request(method: Moya.Method = .post, url: String, parameters: [String: Any],
resultSuccess: @escaping (_ message: String, _ result: Any) -> Void,
resultFail: @escaping (_ message: String) -> Void) {
self.requestPath = url
self.requestMethod = method
self.parameters = parameters
let networkProvider = MoyaProvider
networkProvider.request(self) { result in
self.resultData(result: result, resultSuccess: resultSuccess, resultFail: resultFail)
}
}
//请求结果处理
fileprivate func resultData(result: Result
resultSuccess: @escaping (_ message: String, _ result: Any) -> Void,
resultFail: @escaping (_ message: String) -> Void) {
if case .success(let response) = result {
// 解析数据,读者根据后端返回协议自行修改
let json = JsonUtils.toJson(response.data)
let code = json["Code"].stringValue
let message = json["Message"].stringValue
let result = json["Result"].object
if code == "0" {
resultSuccess(message, result)
} else {
resultFail(message)
}
} else {
resultFail(Strings.hint_network_error) //错误提示,内容读者可自定义
}
}
}
extension NetWorkUtil:TargetType{
public var baseURL: URL{
return URL(string: Constants.URL.BASE_URL)! //网络请求地址,读者改成自己的地址即可
}
public var path: String {
return requestPath
}
public var method: Moya.Method {
return requestMethod
}
public var task: Task {
return .requestParameters(parameters: parameters, encoding: encoding)
}
// 是否执行Alamofire验证
public var validate: Bool {
return false
}
// 请求头
public var headers: [String: String]? {
let token: String = Utils.getData("token") as? String ?? ""
return ["Token": token]
}
}
以上代码正常的话,pod Moya跟SwiftyJSON就能直接使用了,使用方式如下:
let parameters: [String: String] = [
"param1": "1",
"param2": "2"
]
let netWorkUtil = NetWorkUtil()
netWorkUtil.request(method: .post, url: (你的接口,如path/login), parameters: parameters,
resultSuccess: { (message, result) in
//返回成功
},
resultFail: { (message) in
//返回失败
}
)
以上就是全部代码,如果对你有帮助,欢迎转载,注明出处就行。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)