关于在swift中向服务器请求数据的时候,有时候需要向服务器传递很长的数据才行,而且数据还得是Array集合的形式,这让我开始的时候一脸懵逼,根本不会写,也是搞了好久才弄好,这里记录一下,以备后用
1、首先我们肯定意见有了集合数据,这里我的集合数据形式是:
let schArray:Array<SchoolDataModel> = 这里是你的集合数据
可以看出我是泛型的集合
下面我通过JSONEncoder处理一下
//把array<> 转json
let jsonEncoder = JSONEncoder()
let jsonData = try? jsonEncoder.encode(schArray)
let json = String(data: jsonData!, encoding: String.Encoding.utf8)
print(json ?? "")
self.requestMessage(json:json!)
上面拿到jsong格式的数据之后,就可以用了
//请求报修数据数量
func requestMessage(json : String){
let session = URLSession.init(configuration: .default)
let url = URL(string: WebUrlUtil.operatMainUrl) //WebUrlUtil.operatMainUrl是我的请求地址
var request = URLRequest(url: url!)
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
//这里要向服务端传递json对象,且json为对象或者集合数据,这里我就把上面处理好的惊悚格式集合拿过来拼接到下面,然后下面处理完就可以一起作为参数项服务器请求了
let postParams = """
{
"sta" : "1",
"schoolDb" : \(json)
}
"""
let jsonData = "info=\(postParams)"
print(jsonData)
request.httpBody = jsonData.data(using: .utf8)
let task = session.dataTask(with: request) { (data,response,error) in
do{
// 将二进制数据转换为字典对象
if let jsonObj:NSDictionary = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions()) as? NSDictionary{
print("未解码数据:\(jsonObj)")
}
if data == nil{
DispatchQueue.main.async {
//下面是我的一个toast提示,
EWToast.showBottomWithText(text: "暂无数据")
}
return
}
let dict = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
//JSON 是用的SwiftJSON 解析
let jsonObject = JSON(parseJSON: dict! as String)
print("解码数据:-----> \(jsonObject)")
}catch{
print("Error.----------------------")
DispatchQueue.main.async {
EWToast.showBottomWithText(text: "异常:\(error)")
}
}
}
task.resume()
}
就是上面的写法可以了!