带有可编码的快速发布请求

时间:2019-03-14 06:00:14

标签: ios swift post nsjsonserialization encodable

我想快速创建一个发布请求,但是我对Encodable协议感到困惑。以及如何创建它们。

以下是我要发布的数据:

{
answers: [{
            "time": 1,
            "score": 20,
            "status": true,
            "answer": 456
 }],
challenge_date": "2019-03-13"  
}

如何用EncodableJSONSerialization发布?

2 个答案:

答案 0 :(得分:0)

使用Alamofire并通过encoding: JSONEncoding.default将参数作为字典传递,请参见以下代码。

    Alamofire.request(urlString!, method: .post, parameters: parameter, encoding: JSONEncoding.default, headers: headers)
        .responseJSON { (response) in
            switch response.result {
            case .success:
                print(response)                    
            case .failure(let error):
                print(error.localizedDescription)
            }
    }

答案 1 :(得分:0)

此JSON错误。您的JSON必须有效。为了使上述JSON有效,我们需要使用键设置数组。

{
 [{
            "time": 1,
            "score": 20,
            "status": true,
            "answer": 456
 }],
challenge_date": "2019-03-13"  
}

正确

{
    "array": [{
                "time": 1,
                "score": 20,
                "status": true,
                "answer": 456
     }],
    "challenge_date": "2019-03-13"  
}

上面的JSON的Swift模型是这个。

struct YourJSONModel: Codable {
    var challenge_date: String
    var array: Array<ResultModel>
}
struct ResultModel: Codable {
    var time: Int
    var score: Int
    var status: Bool
    var answer: Int
}

var result = ResultModel()
result.time = 10
result.score = 30
result.status = true
result.answer = 250


var jsonModel = YourJSONModel()
jsonModel.array = [result]
jsonModel.challenge_date = "2019-03-13"

将上述模型转换为要发布的json数据。使用以下代码。

let jsonData = try! JSONEncoder().encode(jsonModel)

var request = URLRequest(url: yourApiUrl)
request.httpBody = jsonData
request.httpMethod = "POST"

Alamofire.request(request).responseJSON { (response) in
            switch response.result {
            case .success:
                print(response)                    
            case .failure(let error):
                print(error.localizedDescription)
            }
}