swift - 网络请求数据处理 - 协议处理
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 - 网络请求数据处理 - 协议处理的更多相关文章
- Swift - 网络请求报App Transport Security has blocked a cleartext错
使用Xcode7编写iOS9应用时,如果获取http://数据时会报如下错误: App Transport Security has blocked a cleartext HTTP (http:// ...
- Swift 网络请求数据与解析
一: Swift 网络数据请求与处理最常用第三方 又有时间出来装天才了,还是在学swift,从中又发现一些问题,这两天上网找博客看问题弄的真的心都累.博客一篇写出来,好多就直接照抄,就没有实质性的把问 ...
- swift 网络请求中含有特殊字符的解决方案
在网络请求时,URL出现中文或特殊字符时会造成请求失败,通常可使用 addingPercentEncoding(withAllowedCharacters: CharacterSet) 方法进行解决 ...
- IOS SWIFT 网络请求JSON解析 基础一
前言:移动互联网时代,网络通信已经是手机端必不可少的功能.应用中也必不可少地使用了网络通信,增强客户端与服务器交互.使用NSURLConnection实现HTTP的通信.NSURLConnection ...
- 造轮子 | 怎样设计一个面向协议的 iOS 网络请求库
近期开源了一个面向协议设计的网络请求库 MBNetwork,基于 Alamofire 和 ObjectMapper 实现,目的是简化业务层的网络请求操作. 须要干些啥 对于大部分 App 而言,业务层 ...
- swift项目第十天:网络请求工具类的封装
import UIKit /* 必须先导入头文件:import AFNetworking */ import AFNetworking //MARK:-0:定义枚举:以枚举定义请求网络的get和pos ...
- 【Swift】Alamofile网络请求数据更新TableView的坑
写这篇BLOG前,有些话不得不提一下,就仅当发发恼骚吧... 今天下午为了一个Alamofire取得数据而更新TableView的问题,查了一下午的百度(360也是见鬼的一样),竟然没有一个简单明了的 ...
- iOS开发--Swift 基于AFNetworking 3.0的网络请求封装
Swift和OC基于AFNetworking的网络请求流程相同, 就是语法不同, 对于Swift语法不是很清楚的同学, 建议多看看API文档, 自己多多尝试. 写过OC的应该都明白每句话做什么的, 就 ...
- swift中第三方网络请求库Alamofire的安装与使用
swift中第三方网络请求库Alamofire的安装与使用 Alamofire是swift中一个比较流行的网络请求库:https://github.com/Alamofire/Alamofire.下面 ...
随机推荐
- linux设置iptables防火墙的详细步骤(centos防火墙设置方法)
CentOS系统也是基于linux中的它的防火墙其实就是iptables了,下面我来介绍在CentOS防火墙iptables的配置教程,希望此教程对各位朋友会有所帮助. iptables是与Lin ...
- javascript节点操作insertBefor()
如果想要把节点放在某个特定的位置,而不是放在末尾,就可以使用insertBefore(a,b) 参数a:要插入的节点 参数b:作为参照的节点. var oDiv = document.getEleme ...
- 关于单独使用ckfinder时去除版本号和提示信息的破解
前端时间用ckfinder2.3时 吧他破解了 发现在火狐下报了一个这个错.....getItem() is undefinder 一气之下就把报错的那句话if()语句给删了 没想到歪打正着 ...
- css (具体代码看笔记本)
参考:https://www.cnblogs.com/liwenzhou/p/7999532.html 1. CSS语法 选择器 {属性1:值1;...;} 2. CSS导入方式 1. 行 ...
- 原生socket请求url获取状态码、消息报头、响应正文
需求: (1)使用socket及ssl模块写通用的web客户端 (2)向服务器发起请求 (3)接受响应内容并解析出状态码.消息报头.响应正文 (4)最核心的函数: 输入一个url,返回状态码.消息报头 ...
- mac 安装 nginx
我是用root用户装的 1.先安装PCRE库 可以在这里下载最新版,我这里使用的是8.33的版本然后在终端执行下面的命令. cd ~/Download tar xvzf pcre-8.33.tar.g ...
- linux教程
linux视频教程:尚观 http://www.uplinux.com/shipin/linuxyong-hu-guan-li-zhi-yong-hu-guan-li-01 一,linux开机(cen ...
- angular 参考文档
https://www.w3schools.com/angular/ 参考二: https://www.angular.cn/guide/reactive-forms
- HTML5 Canvas ( 图形的透明度和遮盖 ) globalAlpha, globalCompositeOperation
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- location 对象属性
Location 对象属性 hash 返回一个URL的锚部分 host 返回一个URL的主机名和端口 hostname 返回URL的主机名 href 返回完整的URL pathname 返回的URL路 ...