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.下面 ...
随机推荐
- [UE4]让AI跑起来
让AI由静止状态变成跑步状态,做法跟玩家角色走路一样. 一.创建1D混合动画 二.在AI角色关联的动画蓝图中使用第一步创建的混合动画
- UMG设置组件自适应居中或靠边
转自:http://aigo.iteye.com/blog/2297430 比如你的UI中有些组件需要居中显示,有些需要始终在右上角并且与上边框和右边框保持固定的距离等等,对于这种需要动态适应屏幕分辨 ...
- Northwestern European Regional Contest 2017-I题- Installing Apps题解
一.题意 有一个手机,容量为$C$,网上有$N$个app,每个app有个安装包大小$d_i$,有个安装后的占用空间大小$s_i$,安装app是瞬间完成的,即app的占用空间可以瞬间由$d_i$变成$s ...
- 【Linux_Unix系统编程】chapter6 进程
chapter6 进程 重点关注进程虚拟内存的布局及内容.6.1 进程和程序 进程(process)是一个可执行程序(program)的实例. 程序是包含了一系列信息的文件,这些信息描述了如何在运行时 ...
- 【Unix网络编程】chapter3 套接字编程简介
chapter3套接字编程简介3.1 概述 地址转换函数在地址的文本表达和他们存放在套接字地址结构中的二进制值之间进行转换.多数现存的IPv4代码使用inet_addr和inet_ntoa这两个函数, ...
- django-类装饰器method_decorator
import os from django.shortcuts import render from django.contrib.admin.views.decorators import staf ...
- sql server自增列值的获取
IDENT_CURRENT(tbname) 是看表对象.所以没有受作用域限制. SCOPE_IDENTITY() 受作用域限制.同一个会话里面不同作用域也会有差异 @@IDENTITY 受会话限制 ...
- JavaScript加法
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...
- H5 缓存机制解析
在web项目开发中,我们可能都曾碰到过这样一个棘手的问题: 线上项目需要更新一个有问题的资源(可能是图片,js,css,json数据等),这个资源已经发布了很长一段时间,为什么页面在浏览器里打开还是没 ...
- tensorflow笔记之反向传播时用到的几种方法
1. 梯度下降, tf.train.GradientDescentOptimizer(0.05),梯度下降的问题在与不一定能获得全局最优解,并且因为要在所有数据上最小化损失,所以损失函数是在所有训练数 ...