irpas技术客

Swift 网络请求Moya框架简单二次封装_墨泉v_swift 网络框架

网络投稿 4468

网上搜了一堆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.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Swift #网络框架 #moya #alamofire #网络请求