网络知识 娱乐 Swift 网络请求Moya框架简单二次封装

Swift 网络请求Moya框架简单二次封装

网上搜了一堆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

                //返回失败

            }

        )

以上就是全部代码,如果对你有帮助,欢迎转载,注明出处就行。