[英]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,請原諒上面的重構,因為我會推薦map
或compactMap
而不是構建一個空數組並向其附加值。 它只是更簡潔一點
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.