簡體   English   中英

為什么我的 Int64 值為零?

[英]Why am I getting nil for the Int64 value?

我運行此代碼並正確獲取客戶名稱,但是當涉及整數(獎項數量、汽車數量、狗數量)時,我似乎沒有從 API 得到任何東西('?? 0' 部分踢in 並返回 nil)。

這是我的代碼:

func getAllClients() {
    AF.request("xxxxxxxxxxxxx", headers: headers).responseJSON {response in
        let result = response.value
        var allCli: [ClientsData] = []
        if result != nil {
            let dataDictionary = result as! [Dictionary <String, AnyObject>]
            for clientsData in dataDictionary {
                let cllstname = clientsData["cllstname"] as? String ?? "Error"
                let noofawards = clientsData["noofawards"] as? Int64 ?? 0
                let noofcars = clientsData["noofcars"] as? Int64 ?? 0
                let noofdogs = clientsData["noofdogs"] as? Int64 ?? 0
                let clientsObject = ClientsData (cllstname: cllstname, noofawards: noofawards, noofcars: noofcars, noofdogs: noofdogs)

                allCli.append(clientsObject)
            }
        }
        self.allClients = allCli.sorted(by: { $0.noofawards > $1.noofawards })
    }
}

但是,如果我這樣做

print(clientsData)

我在調試部分得到了很好的完整響應。 所有的數字都在那里,所以 API 正在發送,我正在接收。

為什么我得到 nil 結果,以及如何解決這個問題?

您應該查看原始 JSON。 例如,抓取data

let string = response.data.flatMap { String(data: $0, encoding: .utf8) }
print(string ?? "Unable to get String representation of the data")

我打賭這些數字將用引號引起來,這意味着它們實際上是數值的字符串表示形式,而不是實際的數字:

[{"noofcars": "2", "cllstname": "Smith", ...

請注意,我要求您查看原始 JSON,而不僅僅是已經解碼的result 我們需要了解原始 JSON 如何表示這些數值。

讓我們假設我的假設是正確的,您將這些值作為字符串獲取。 顯然,正確的解決方案是 web 服務應該將數值作為數字而不是字符串發送。 但是您想使用現有的 JSON,首先獲取numofcars (等)的String表示形式,然后將其轉換為數值。 例如:

AF.request("xxxxxxxxxxxxx", headers: headers).responseJSON { response in
    guard let dictionaries = response.value as? [[String: Any]] else { return }

    self.allClients = dictionaries.compactMap { dictionary -> ClientsData? in
        let cllstname = dictionary["cllstname"] as? String ?? "Error"
        let awards = (dictionary["noofawards"] as? String).flatMap { Int($0) } ?? 0
        let cars = (dictionary["noofcars"] as? String).flatMap { Int($0) } ?? 0
        let dogs = (dictionary["noofdogs"] as? String).flatMap { Int($0) } ?? 0
        return ClientsData(cllstname: cllstname, noofawards: awards, noofcars: cars, noofdogs: dogs)
    }
    .sorted { $0.noofawards > $1.noofawards }
}

FWIW,請原諒上面的重構,因為我會推薦mapcompactMap而不是構建一個空數組並向其附加值。 它只是更簡潔一點

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM