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. freePBX汉化方法记录——备忘

    FreePBX汉化[root@bgcc69:/var/www/html/admin/i18n/zh_CN/LC_MESSAGES]$pwd/var/www/html/admin/i18n/zh_CN/ ...

  2. Lua C++互传结构体实例

    转自:http://bbs.csdn.net/topics/350261649 =====main.cpp======= #include "stdio.h" extern &qu ...

  3. javascript的焦点管理

    HTML5也添加了辅助管理DOM焦点的功能. 元素获得焦点的方式有页面加载,用户输入和代码中调用的focus()方法. 而document.activeElement属性保存着当前获得焦点的引用. v ...

  4. Z-tree 统计每一父节点的叶子节点数(看这一篇就够了)

    最近刚走出校园的我找到了第一份工作,在入职考核中就遇见了一道Z-tree的试题 这道题目本身是不难的,但是我第一次接触这个插件而且还把解决问题的方向搞错了,弄的我好几天都很难受. 弄得我都开始怀疑人生 ...

  5. 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #21FUSE

    HACK #21FUSE 本节将介绍使用用户进程的文件系统框架—FUSE.FUSE概要FUSE(Filesystem in Userspace,用户空间文件系统),是用来生成用户空间的一般进程的框架. ...

  6. Missing write access to /usr/local/lib/node_modules/webpack/node_modules/assert

    1. 加上sudo指令 sudo npm install ... 2. 可能是网络原因, 改用cnpm cnpm install ...

  7. python带参数装饰器使用

    # -*- coding: utf-8 -* """TensorFlow指定使用GPU工具类 author: Jill usage: 方法上加@tf_with_devic ...

  8. 搭建 yum 仓库

    翻译来自:https://wiki.centos.org/HowTos/CreateLocalRepos 本地仓库 http 仓库 测试 Steps: 1.把rpm包放在一个目录中.可以根据需要在该目 ...

  9. shutil模块---文件,文件夹复制、删除、压缩等处理

    shutil模块:高级的文件,文件夹,压缩包处理 拷贝内容 # shutil.copyfileobj(open('example.ini','r'),open('example.new','w')) ...

  10. Kafka集群扩展以及重新分布分区

    我们往已经部署好的Kafka集群里面添加机器是最正常不过的需求,而且添加起来非常地方便,我们需要做的事是从已经部署好的Kafka节点中复制相应的配置文件,然后把里面的broker id修改成全局唯一的 ...