[英]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.