可解码Json,功能根本运行?

Decodable Json, function doesn't run at all?

我知道这个可解码的 json 问题已被问过很多次,in-fact 我能够为我的其他项目之一进行数据检索。但是,我似乎无法让它发挥作用。 IT 负责检索数据、解码并存储数据。但是,我的打印功能从来没有 运行。我没有看到 "executed" 打印等等。它确实使用 api 中的 headers 打印 httpResponse,所以我知道它正在工作并且有响应。

可解码

struct GetId: Decodable {
    let id : String?
    let deck_id : String?
    var completed_at : String?
    let created_at : String?
    let locale_key : String?
    let profile_id : String?
    let recommendation_id : String
    let package_id : String?
    let status : String?
    let scoring_scale : String?
}

示例响应

{
    "id": "XXXXXXX-XXX-4c6a-XXXX-1XXXXXXX223",
    "deck_id": "career-deck",
    "completed_at": null,
    "created_at": 1551867228744,
    "locale_key": "en-US",
    "profile_id": "XXXXXXX-XXX-4c6a-XXXX-1XXXXXXX223",
    "recommendation_id": null,
    "package_id": null,
    "status": "created",
    "scoring_scale": "NORMAL"
}

我的函数

    func requestId()
        {
            let headers = [
                "Authorization": "Basic XXXxxxxXXxxXXXXxxxXXX:x",
                "Content-Type": "application/json",
                "cache-control": "no-cache"
            ]
            let parameters = ["deck_id": "career-deck"] as [String : Any]
            let postData = try? JSONSerialization.data(withJSONObject: parameters, options: [])

            let request = NSMutableURLRequest(url: NSURL(string: "https://api.traitify.com/v1/assessments")! as URL,
                                              cachePolicy: .useProtocolCachePolicy,
                                              timeoutInterval: 10.0)

            request.httpMethod = "POST"
            request.allHTTPHeaderFields = headers
            request.httpBody = (postData as! Data)

            //let session = URLSession.shared
            //let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
            let task = URLSession.shared.dataTask(with: request as URLRequest) { (data, response, error) in
                if (error != nil) {
                    print(error)
                } else {
                    let httpResponse = response as? HTTPURLResponse
                    print(httpResponse)
                    if let getIdd = try? JSONDecoder().decode([GetId].self, from: data!){
                    getId = getIdd
                    print(getId[0].id)
                    print("executed")
                }
                }
            }
            task.resume()

        }

根据您的示例,created_at 不是字符串(它是一个数值)并且 recommendation_id 需要是可选的(与所有其他字段一样)。

此外,您的示例是单个记录,但您正在解码对象数组。将解码更改为 JSONDecoder().decode(GetId.self, from: data!)