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.下面 ...
随机推荐
- freePBX汉化方法记录——备忘
FreePBX汉化[root@bgcc69:/var/www/html/admin/i18n/zh_CN/LC_MESSAGES]$pwd/var/www/html/admin/i18n/zh_CN/ ...
- Lua C++互传结构体实例
转自:http://bbs.csdn.net/topics/350261649 =====main.cpp======= #include "stdio.h" extern &qu ...
- javascript的焦点管理
HTML5也添加了辅助管理DOM焦点的功能. 元素获得焦点的方式有页面加载,用户输入和代码中调用的focus()方法. 而document.activeElement属性保存着当前获得焦点的引用. v ...
- Z-tree 统计每一父节点的叶子节点数(看这一篇就够了)
最近刚走出校园的我找到了第一份工作,在入职考核中就遇见了一道Z-tree的试题 这道题目本身是不难的,但是我第一次接触这个插件而且还把解决问题的方向搞错了,弄的我好几天都很难受. 弄得我都开始怀疑人生 ...
- 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #21FUSE
HACK #21FUSE 本节将介绍使用用户进程的文件系统框架—FUSE.FUSE概要FUSE(Filesystem in Userspace,用户空间文件系统),是用来生成用户空间的一般进程的框架. ...
- Missing write access to /usr/local/lib/node_modules/webpack/node_modules/assert
1. 加上sudo指令 sudo npm install ... 2. 可能是网络原因, 改用cnpm cnpm install ...
- python带参数装饰器使用
# -*- coding: utf-8 -* """TensorFlow指定使用GPU工具类 author: Jill usage: 方法上加@tf_with_devic ...
- 搭建 yum 仓库
翻译来自:https://wiki.centos.org/HowTos/CreateLocalRepos 本地仓库 http 仓库 测试 Steps: 1.把rpm包放在一个目录中.可以根据需要在该目 ...
- shutil模块---文件,文件夹复制、删除、压缩等处理
shutil模块:高级的文件,文件夹,压缩包处理 拷贝内容 # shutil.copyfileobj(open('example.ini','r'),open('example.new','w')) ...
- Kafka集群扩展以及重新分布分区
我们往已经部署好的Kafka集群里面添加机器是最正常不过的需求,而且添加起来非常地方便,我们需要做的事是从已经部署好的Kafka节点中复制相应的配置文件,然后把里面的broker id修改成全局唯一的 ...