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

//返回失败

}

)

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

Swift 网络请求Moya框架简单二次封装相关推荐

  1. Swift 网络请求 Moya+RxSwift

    Swift中优雅的网络请求 官方github // 1.定一个enum enum MyService {xxxxcase showUser(id: Int)xxx }// 2.扩展这个enum,符合 ...

  2. dio设置自定义post请求_Flutter Dio简单二次封装和自定义Header

    话不多说自己看代码封装的比较简单,比较适合入门学习Dio. import 'package:dio/dio.dart'; import 'Api.dart'; /* * 封装 restful 请求 * ...

  3. Android-第十一节网络请求第三方框架-xutils3

    目录 一.xUtils3简介 1.网络请求 2.网络图片加载 3.注解 4.数据库 二.xUtils框架使用方法 1.xUtils框架一个简单的网络请求 2.xUitls框架注解 2.1布局文件的注解 ...

  4. Alamofire网络库基础教程:使用 Alamofire 轻松实现 Swift 网络请求

    Alamofire网络库基础教程:使用 Alamofire 轻松实现 Swift 网络请求 转自 http://www.cocoachina.com/ios/20141202/10390.html 本 ...

  5. Flutter - dio 简单二次封装

    demo 地址: https://github.com/iotjin/jh_flutter_demo Flutter Dio简单二次封装和自定义Header Flutter Dio二次封装 Flutt ...

  6. Swift 网络请求库Moya的使用

    Moya是Swift中的网络库Alamofire的二次封装,Alamofire本身使用起来是很简单方便的,例子如下: func loadData(){var param = [String:Strin ...

  7. 二、Swift网络请求回来的数据我这样取

    网络请求框架Alamofire 源码地址 Swift 2.3 Alamofire3.0版本支持 iOS 8 Swift 3 Alamofire4.0以上版本支持 iOS 9及以上系统 json数据: ...

  8. Swift 优雅的网络请求Moya

    Moya使用demo Moya 面向协议 Moya的模块组成 代码demo Controller中使用 Moya Moya是一个网络抽象层,它在底层将Alamofire进行封装,对外提供更简洁的接口供 ...

  9. Android中Http网络请求库框架Volley和Asnyc-http的使用---第三方库学习笔记(一)

    Volley框架: 特点: 通信更快,更简单 Get,Post网络请求及网络图像的高效率异步处理请求. 当多个请求时,对网络请求进行排序,按优先级处理 当网络状况不好时,Volley可以自动对上次请求 ...

  10. Swift 网络请求数据与解析

    一: Swift 网络数据请求与处理最常用第三方 又有时间出来装天才了,还是在学swift,从中又发现一些问题,这两天上网找博客看问题弄的真的心都累.博客一篇写出来,好多就直接照抄,就没有实质性的把问 ...

最新文章

  1. java中的文件_JAVA中文件的操作
  2. 【Python】写文件个性化设置模块Python_Xlwt练习
  3. Vue.js 生产环境部署
  4. 【youcans 的 OpenCV 例程200篇】135. 形态学重建之粒度测定
  5. 身边的同学突然去世,听到消息的时候会伤心吗?
  6. 五种方法快速查找对方IP地址(转)
  7. 2021年高压电工模拟考试题及高压电工操作证考试
  8. “商务网”,聚合头头网商务开放室,集群式商务推广平台
  9. 计算机进入低能耗休眠状态,BIOS电源管理ACPI的D3cold-D3hot
  10. 比UUID更快更安全NanoID到底是怎么实现的?(荣耀典藏版)
  11. linux串口工具 kermit,ubuntu串口工具(minicom、kermit)的使用
  12. java 线程的构造函数_深入理解Thread构造函数
  13. java计算机毕业设计化妆品销售网站源码+mysql数据库+系统+lw文档+部署
  14. 潜力无限的BTF,开启区块链金融新格局
  15. 自然语言处理的数学原理(一)
  16. 添加常用查询新增方法
  17. html鼠标滑过导航条展开导航条,jquery css实现鼠标滑过导航菜单栏动画效果
  18. 江苏省高等学校计算机一级成绩查询,江苏计算机等级考试成绩查询入口
  19. 用u盘安装ubuntu server 9.10 fail
  20. simditor图标不显示

热门文章

  1. 孙式无极桩站桩要领--林泰年
  2. http://trans.godict.com/index.php
  3. 2021最新Java面试真题解析!java开发技能掌握
  4. 机器学习笔记 - 时间序列的季节性
  5. docker学习--数据卷
  6. 把妹需要勇敢,心有猛虎,细嗅蔷薇
  7. 1200PLC学习资料整理
  8. 神经网络井字棋AI对战版的开发与测试
  9. Problem : 美丽黄山II
  10. Springboot 整合 RabbitMQ「三种模式使用」