1. 在类的模型之中或类的结构体 里面 实现下面方法

/// 添加预约数据源模型 - rootModel
class DataModelForAddNewBespeakModel: NSObject { /// 返回新增预约界面 cell数量 目前就3个
var cellCount = 3 /// 顾客模型
var customerModel = Mapper<JYCustomerListItemModel>().map(JSONObject: "默认是空的") /// 时间和发型师 的组合
var timeModelAndHairdresserModel = TimeModelAndHairdresserModel() /// 选择的项目 - 传给后台的数据
var itemsModel = ItemsModel() /// phz 传给我的原生的数据 JYBespekSelectItemModel
var originalDataForItemsModel = [JYBespekSelectItemModel]() /// 新增预约需要的参数 这是关键 的一个
func paramsForNewAddBespeak() -> [String: Any] {
return ["crm_customer_ID": self.customerModel?.customerId ?? "",
"BookingDate" : self.timeModelAndHairdresserModel.timeModel.selectedDateModel.yearMonthDay ,
"StartTime" : self.timeModelAndHairdresserModel.timeModel.bookTime ,
"ServiceEmployee" : self.timeModelAndHairdresserModel.hairdresserModel?.employeeId ?? "",
"ServiceItemGroupID" : self.itemsModel.groupId ,
"Remark" : "备注",
"itemIds" : self.itemsModel.projectIdArr] as [String: Any]
}
}

  
2. 协议的实现

//MARK: 纯功能性协议:BespeakRequestProtocol(保证控制器拥有这个方法), 必须实现 业务处理协议:JYServiceNetworkProtocol(请求失败和请求成功的业务处理)
protocol BespeakRequestProtocol{}
extension BespeakRequestProtocol where Self: UIViewController { /// 新增预约请求
func requestForNewAddBespeak(params:[String:Any], type:JYServiceNetworkProtocol) {
JYRequestAlamofire.request(method: JYHTTPMethod.post, url: JY_API_ADD_BESPEAK, params: params, handleSuccess: { (result) in
let model = Mapper<QueryBespeakModel>().map(JSONObject: result)
if model?.ret == "0"{
type.operationSuccess(data: [:], identifier: "func requestForNewAddBespeak")
}else{
type.serverShowErr(err: model?.msg, identifier: "func requestForNewAddBespeak")
}
}) { (err) in
type.serverShowErr(err: "暂无网络", identifier: "func requestForNewAddBespeak")
}
}
}

 
3. 控制器调用

 

  class JYAddNewBespeakVC: JYBaseVC {

  /// 页面所有数据模型

  var dataModel = DataModelForAddNewBespeakModel()

  }

3.1 

    //点击确定按钮
@IBAction func clickSureBespeakBtn(_ sender: Any) { view.showHud()
self.requestForNewAddBespeak(params: self.dataModel.paramsForNewAddBespeak(), type: self) } 3.2 实现协议 extension JYAddNewBespeakVC:BespeakRequestProtocol, JYServiceNetworkProtocol{ func serverShowErr(err: String?, identifier: String?) {
view.showTipsInfo(tips: err)
} func operationSuccess(data: [String : Any]?, identifier: String?) {
view.hiddenHUd()
    "请求成功做的事情"
}
}

4.因为本身是controller 遵循的协议, 可以获得view的属性

    /// 取消预约请求
func requestForCancleBespeak(bespeakId : String, ProtocolFollower:JYServiceNetworkProtocol){ view.showHud()
let parameters = ["ID" : bespeakId]
weak var weakSelf = self
JYRequestAlamofire.request(method: .put, url:JY_API_CANCLE_BESPEAK , params: parameters, handleSuccess: { [weak self] (res) in }) { [weak self] (_) in
self?.view.loseNetWorkDismissToast()
}
}

  

swift - 网络请求数据处理 - 协议处理的更多相关文章

  1. Swift - 网络请求报App Transport Security has blocked a cleartext错

    使用Xcode7编写iOS9应用时,如果获取http://数据时会报如下错误: App Transport Security has blocked a cleartext HTTP (http:// ...

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

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

  3. swift 网络请求中含有特殊字符的解决方案

    在网络请求时,URL出现中文或特殊字符时会造成请求失败,通常可使用  addingPercentEncoding(withAllowedCharacters: CharacterSet) 方法进行解决 ...

  4. IOS SWIFT 网络请求JSON解析 基础一

    前言:移动互联网时代,网络通信已经是手机端必不可少的功能.应用中也必不可少地使用了网络通信,增强客户端与服务器交互.使用NSURLConnection实现HTTP的通信.NSURLConnection ...

  5. 造轮子 | 怎样设计一个面向协议的 iOS 网络请求库

    近期开源了一个面向协议设计的网络请求库 MBNetwork,基于 Alamofire 和 ObjectMapper 实现,目的是简化业务层的网络请求操作. 须要干些啥 对于大部分 App 而言,业务层 ...

  6. swift项目第十天:网络请求工具类的封装

    import UIKit /* 必须先导入头文件:import AFNetworking */ import AFNetworking //MARK:-0:定义枚举:以枚举定义请求网络的get和pos ...

  7. 【Swift】Alamofile网络请求数据更新TableView的坑

    写这篇BLOG前,有些话不得不提一下,就仅当发发恼骚吧... 今天下午为了一个Alamofire取得数据而更新TableView的问题,查了一下午的百度(360也是见鬼的一样),竟然没有一个简单明了的 ...

  8. iOS开发--Swift 基于AFNetworking 3.0的网络请求封装

    Swift和OC基于AFNetworking的网络请求流程相同, 就是语法不同, 对于Swift语法不是很清楚的同学, 建议多看看API文档, 自己多多尝试. 写过OC的应该都明白每句话做什么的, 就 ...

  9. swift中第三方网络请求库Alamofire的安装与使用

    swift中第三方网络请求库Alamofire的安装与使用 Alamofire是swift中一个比较流行的网络请求库:https://github.com/Alamofire/Alamofire.下面 ...

随机推荐

  1. ROS-PCQ基于IP的限速(总带宽上下行5M)

    /ip firewall mangle add chain=forward src-address=192.168.0.0/16 \ action=mark-connection new-connec ...

  2. Spark分析之DAGScheduler

    DAGScheduler概述:是一个面向Stage层面的调度器: 主要入参有: dagScheduler.runJob(rdd, cleanedFunc, partitions, callSite, ...

  3. string hashcode 解读

    偶尔看到string hashcode方法如下 public int hashCode() { int h = hash; if (h == 0 && value.length > ...

  4. 扯皮的cplex-感觉时间不对

    import ilog.cplex.CpxMult; import ilog.cplex.CpxNumExpr; import ilog.cplex.IloCplex; import ilog.con ...

  5. 玩转laravel5.4的入门动作(二)

    做个文章的增删改查 第一步  把数据库的表结构建好,生成迁移 1 怎么建,当然是用php artisan命令了 使用 Artisan 命令 make:migration 来创建一个新的迁移: php ...

  6. B站上的一个MATLAB与神经网络的视频,捡漏

    ▶ av15514817.这里集中了一些从视频中学到的散点. ▶ 语句 "edit + 函数名" 可以打开部分内置函数的源代码.非公开的源代码这会打开一个全是注释的文档. ▶ 函数 ...

  7. 二维数组 cudaMallocPitch() 和三维数组 cudaMalloc3D() 的使用

    ▶ 使用函数 cudaMallocPitch() 和配套的函数 cudaMemcpy2D() 来使用二维数组.C 中二维数组内存分配是转化为一维数组,连贯紧凑,每次访问数组中的元素都必须从数组首元素开 ...

  8. 搜集几个API接口

    新浪:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js 返回数据:var remote_ip_info = {"ret ...

  9. url参数带点

    今天在处理一些接口的时候,发现了一些神奇bug. url路径参数/binbin没有问题 但是/jay.chou 发现查不到正确数据了. 其实是spring没有配置好参数带点的情况. RequestMa ...

  10. 安装vue.js

    1.  下载node https://nodejs.org/dist/v8.11.2/node-v8.11.2-x64.msi 2. 查看npm版本 在cmd下输入命令:npm -v 如果低于3.0版 ...