iOS学习专题iOS学习笔记

swift发送JSON数据给服务器

2017-08-04  本文已影响0人  哭与行

最近做的项目其中有一条增加联系人的需求,,而且要求是传json格式的字符串给后台,而且字符串是一个字典类型的,首先项目用OC写的,弄了段时间终于成功了,然后今天使用swift重新写项目玩,swift发送JSON数据给服务器在网上找了半天都没有找到答案,经过努力终于实现了弄了几个小时终于弄通了.在此分享一下,而且有个alamofire的问题向各位大神请教.

问题:在使用alamofire发送请求时候,调用发送json格式总是报错,求答案!!!

网上找答案是:encoding:ParameterEncoding.JSON,但是我怎么用怎么改都是错...,最后使用了AFN框架才实现了功能.

首先讲下OC中发送JSON格式数据给服务器:如下图↓

在此说明一个问题:关于AFN内存泄漏问题

//    AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];

使用上面方式请求数据会导致内存泄漏,因为他不是一个单例!所以开发中我们要将AFHTTPSessionManager写成单例再去调用,昨天instrument测试无意间发现的,网上很多这个答案

AFHTTPSessionManager *mgr = [self getManager];(自己写的一个单例)

mgr.requestSerializer = [AFJSONRequestSerializer serializer];(发送json格式给后台)

下面要说的是: swift发送json格式字符串给后台,使用AFN,如下图 ↓

如果请求要设置请求头,切记一定要讲请求头设置放在manager.requestSerializer = AFJSONRequestSerializer()之后,我就因为放在之前调试了很久...

调用方法:至此调用json格式请求给服务器就成功了!!!

贴代码:方便使用:

class HJNetworkManager: AFHTTPSessionManager {

static let shared = HJNetworkManager()

func json_request(method:HJHTTPMethod = .POST, URLString:String, parameters:[String : AnyObject]?,headerValue:String, completion:@escaping (_ json :AnyObject?, _ :Bool) -> ()){

// 成功回调

let success = { (task:URLSessionDataTask ,json:Any?)->Void in

completion(json as AnyObject?, true)

}

// 失败回调

let failure = { (task:URLSessionDataTask?, error:Error)->() in

print("网络请求错误:\(error)")

completion(nil, false)

}

let manager = AFHTTPSessionManager()

// json请求

manager.requestSerializer = AFJSONRequestSerializer()

// 设置请求头

manager.requestSerializer.setValue(headerValue, forHTTPHeaderField: "token")

if method == .POST {

manager.post(URLString, parameters: parameters, progress: nil, success: success, failure: failure)

}else{

manager.get(URLString, parameters: parameters, progress: nil, success: success, failure: failure )

}

}

}

仅供大家参考,不正确之处望大神批评指正,大家一起进步!~☺️

上一篇 下一篇

猜你喜欢

热点阅读