网上搜了一堆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<NetWorkUtil>()
? ? ? ? networkProvider.request(self) { result in
? ? ? ? ? ? self.resultData(result: result, resultSuccess: resultSuccess, resultFail: resultFail)
? ? ? ? }
? ? }
? ? //请求结果处理
? ? fileprivate func resultData(result: Result<Moya.Response, MoyaError>,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 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
? ? ? ? ? ? ? ? //返回失败
? ? ? ? ? ? }
? ? ? ? )
以上就是全部代码,如果对你有帮助,欢迎转载,注明出处就行。
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。 |