Alamofire的使用和网络请求的封装,解决不能打印中文的问题
2017-03-07 01:05
489 查看
在swift3.0中Alamofire可以说是一个相当完美的网络请求的框架,使用起来和NFNetworking一样的顺手,在这里和大家分享一下,这次只做了一个浅层次的封装一个两层的封装,本文基于swift3.0
-----第一层发送网络请求
import UIKit
import Alamofire
enum MethodType{
case GET
case POST
}
class NetworkTools: NSObject {
//封装一个类方法;
class
func requetDate(_ type:MethodType,URLString:String,paramters:[String:AnyObject
]?=nil,finishCallBack:@escaping (_ result:
AnyObject)->()){
//获取类型:
let method1 = type == .GET ?HTTPMethod.get
: HTTPMethod.post
Alamofire.request(URLString, method: method1, parameters:paramters).responseJSON { (response)
in
guard
let result1 = response.result.value
else{
print(response )
return
}
//处理Unicode编码。将unicode编码的json转成uft8编码
guard
let data = response.data
else{
return
}
let utf8Text =
String(data: data , encoding: .utf8)
print(utf8Text ??
"编码错误")
finishCallBack(result1 as
AnyObject)
//finishCallBack(result1 as AnyObject)
// finishCallBack(utf8Text as AnyObject)
}
}
//上传图片;
class
func upLoadImageRequest(urlString :
String, params:[String:String], data: [Data],
name: [String],success :
@escaping (_ response : [String :
AnyObject])->(), failture :
@escaping (_ error :
Error)->()){
let headers = ["content-type":"multipart/form-data"]
//__________*************________________
Alamofire.upload(
multipartFormData: { multipartFormData in
//666多张图片上传
let flag = params["mobile"]
//let userId = params["userId"]
//multipartFormData.append(flag?.data(using: String.Encoding.utf8), withName: ""),
multipartFormData.append((flag?.data(using:
String.Encoding.utf8)!)!, withName:
"mobile")
// multipartFormData.append( (userId?.data(using: String.Encoding.utf8)!)!, withName: "userId")
for i
in 0..<data.count {
multipartFormData.append(data[i], withName:
"avatar", fileName: name[i], mimeType:
"image/png")
}
},
to: urlString,
method: .post,
headers: headers,
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload,
_, _):
upload.responseJSON { response
in
if
let value = response.result.value
as? [String:
AnyObject]{
success(value)
print(value)
}
print("响应请求:"+"\response.response?.statusCode")
guard
let data = response.data
else{
return
}
//此处处理的是中文的打印问题,虽然格式不太完美,但是可以使用KJson能够解析,如果大家有什么好办法,可以下方留言,请赐教
let utf8Text =
String(data: data , encoding: .utf8)
print("照片上传返回:"+utf8Text!)
}
case .failure(let encodingError):
// PrintLog(encodingError)
failture(encodingError)
}
}
)
//换一种方法试一试;
// Alamofire.upload(data[0], to: urlString).response { response in
// debugPrint(response)
// let utf8Text = String(data: response.data! , encoding: .utf8)
// debugPrint("服务器返回---%@"+utf8Text!)
//
// }
}
}
//封装网络请求的方法
class NetworkToolRequest:
NSObject {
class
func getIdentifierCode(params:[String:AnyObject],_
finishCallBack: @escaping(_ result:
AnyObject)->()){
NetworkTools.requetDate(.POST,
URLString: "http://120.77.69.123:8080/ubEApi/eApi/sendSMSCaptcha.do") { (response)
in
finishCallBack(response)
}
}
//注册---接口3.2
class
func registUser(params:[String:AnyObject],_
finishCallBack: @escaping(_ result:
AnyObject)->()){
NetworkTools.requetDate(.POST, URLString:
"http://120.77.69.123:8080 /ubEApi/eApi/register.do", paramters: params) { (response)
in
finishCallBack(response)
}
}
------
}
}
}
-----第一层发送网络请求
import UIKit
import Alamofire
enum MethodType{
case GET
case POST
}
class NetworkTools: NSObject {
//封装一个类方法;
class
func requetDate(_ type:MethodType,URLString:String,paramters:[String:AnyObject
]?=nil,finishCallBack:@escaping (_ result:
AnyObject)->()){
//获取类型:
let method1 = type == .GET ?HTTPMethod.get
: HTTPMethod.post
Alamofire.request(URLString, method: method1, parameters:paramters).responseJSON { (response)
in
guard
let result1 = response.result.value
else{
print(response )
return
}
//处理Unicode编码。将unicode编码的json转成uft8编码
guard
let data = response.data
else{
return
}
let utf8Text =
String(data: data , encoding: .utf8)
print(utf8Text ??
"编码错误")
finishCallBack(result1 as
AnyObject)
//finishCallBack(result1 as AnyObject)
// finishCallBack(utf8Text as AnyObject)
}
}
//上传图片;
class
func upLoadImageRequest(urlString :
String, params:[String:String], data: [Data],
name: [String],success :
@escaping (_ response : [String :
AnyObject])->(), failture :
@escaping (_ error :
Error)->()){
let headers = ["content-type":"multipart/form-data"]
//__________*************________________
Alamofire.upload(
multipartFormData: { multipartFormData in
//666多张图片上传
let flag = params["mobile"]
//let userId = params["userId"]
//multipartFormData.append(flag?.data(using: String.Encoding.utf8), withName: ""),
multipartFormData.append((flag?.data(using:
String.Encoding.utf8)!)!, withName:
"mobile")
// multipartFormData.append( (userId?.data(using: String.Encoding.utf8)!)!, withName: "userId")
for i
in 0..<data.count {
multipartFormData.append(data[i], withName:
"avatar", fileName: name[i], mimeType:
"image/png")
}
},
to: urlString,
method: .post,
headers: headers,
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload,
_, _):
upload.responseJSON { response
in
if
let value = response.result.value
as? [String:
AnyObject]{
success(value)
print(value)
}
print("响应请求:"+"\response.response?.statusCode")
guard
let data = response.data
else{
return
}
//此处处理的是中文的打印问题,虽然格式不太完美,但是可以使用KJson能够解析,如果大家有什么好办法,可以下方留言,请赐教
let utf8Text =
String(data: data , encoding: .utf8)
print("照片上传返回:"+utf8Text!)
}
case .failure(let encodingError):
// PrintLog(encodingError)
failture(encodingError)
}
}
)
//换一种方法试一试;
// Alamofire.upload(data[0], to: urlString).response { response in
// debugPrint(response)
// let utf8Text = String(data: response.data! , encoding: .utf8)
// debugPrint("服务器返回---%@"+utf8Text!)
//
// }
}
}
//封装网络请求的方法
class NetworkToolRequest:
NSObject {
class
func getIdentifierCode(params:[String:AnyObject],_
finishCallBack: @escaping(_ result:
AnyObject)->()){
NetworkTools.requetDate(.POST,
URLString: "http://120.77.69.123:8080/ubEApi/eApi/sendSMSCaptcha.do") { (response)
in
finishCallBack(response)
}
}
//注册---接口3.2
class
func registUser(params:[String:AnyObject],_
finishCallBack: @escaping(_ result:
AnyObject)->()){
NetworkTools.requetDate(.POST, URLString:
"http://120.77.69.123:8080 /ubEApi/eApi/register.do", paramters: params) { (response)
in
finishCallBack(response)
}
}
------
}
}
}
相关文章推荐
- iOS使用AFNetworking请求回来的网络数据,不能显示中文, 新建一个分类解决。
- react native 使用fetch进行网络请求(https),解决SSLHandshake问题,以及怎样进行二次封装
- Xcode7 不能使用http网络请求问题解决
- 双硬盘Win7装Ubuntu 12.04经验并解决无线网络不能使用问题
- 使用cygwin在windows上模拟unix环境,解决不能显示中文的问题
- 在使用jscalendar时候,中文或者utf8不能正确使用的问题解决
- 双硬盘Win7装Ubuntu 12.04经验并解决无线网络不能使用问题
- ReactNative踩坑日志——使用async/await语法解决网络请求的异步导致的指令执行顺序错乱问题
- 使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)
- 解决问题:在使用springmvc的web.xml配置乱码拦截器之后接收的get或者post请求中文还是乱码
- 解决 CefSharp WPF控件不能使用输入法输入中文的问题(代码已提交到 github)
- 待解决问题:验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate
- CAS不能使用中文账户登录问题的解决
- 使用put请求时不能获得前端的数据问题的解决
- 解决针对ubuntu11.04安装中文包后不能正常查看或使用pdf和Archiver的问题
- cocos2dx3.2 使用SimpleAudioEngine时不能播放音频解决办法(中文路径问题)
- 使用filter解决get请求中文乱码问题
- 关于structs2整合jasperreport时打印出PDF时中文不能显示的问题的解决
- 网络请求数据回来中文乱码问题解决方法
- 使用SpringMVC参数传递时,解决get请求时中文乱码的问题