【问题标题】:Swift 4 Codable Struct with Post Request带有发布请求的 Swift 4 可编码结构
【发布时间】:2018-05-11 05:56:18
【问题描述】:

我想发送一个带有类似 Codable 结构的 url.request(POST):

struct Picklist : Codable {
    var id = Int()
    var ean = String()
    var position = String()
}

我的要求是这样的:

 let request = NSMutableURLRequest(url: NSURL(string: "http://XXX.XX.XX.XX/NEW/index.php")! as URL)
        request.httpMethod = "POST"



                let myID = Picklist.init(id: 3, ean: "asdf", position: "q")
                let encoder = JSONEncoder()
                do {
                    let jsonData = try encoder.encode(myID)
                    request.httpBody = jsonData
                    print("jsonData: ", String(data: request.httpBody!, encoding: .utf8) ?? "no body data")
                } catch {
                    print("ERROR")
                }

        let task = URLSession.shared.dataTask(with: request as URLRequest) {
            data, response, error in

            if error != nil {
                print("error=\(error)")
                return
            }

            print("response = \(response)")

            let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
            print("responseString = \(responseString)")
        }
        task.resume()

在服务器端我有这个 PHP 脚本:

<?php
    print_r($_POST);
?>

但我收到了:

responseString = Optional(Array
(
    [{"id":3,"ean":"asdf","position":"q"}] => 
)

我的问题是我无法在我的 PHP 上获取带有值的密钥。..

代码有什么问题?

【问题讨论】:

    标签: php json url swift4 codable


    【解决方案1】:

    最后,答案是:

    如果您想使用响应字符串,只需解码“数据”

    例如:

    guard let data = data else {return}
                do{
                    let realData = try JSONDecoder().decode(response.self, from: data)
                    completion(realData)
                }catch let jsonErr{
                    print(jsonErr)
                }
    

    在 realData 中你可以使用数据,但是你需要创建 Codable/decobale 结构来使用

    response 是我的娇惯/可解码结构

    或:

    let responseJSON = try? JSONSerialization.jsonObject(with: data, options: [])
        if let responseJSON = responseJSON as? [String: Any] {
            print(responseJSON)
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-08
      • 1970-01-01
      • 2021-09-06
      • 2021-09-23
      • 2019-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多