解析Alamofire结果swift
我无法解析来自解析Alamofire结果swift,swift,alamofire,nsdictionary,swifty-json,Swift,Alamofire,Nsdictionary,Swifty Json,我无法解析来自AF请求的以下响应–let json=result as!NSDictionary–在Swift中: { errors = ( ); get = statistics; parameters = { country = germany; }; response = ( { cases = {
AF
请求的以下响应–let json=result as!NSDictionary
–在Swift中:
{
errors = (
);
get = statistics;
parameters = {
country = germany;
};
response = (
{
cases = {
"1M_pop" = 14303;
active = 317167;
critical = 4179;
new = "+15161";
recovered = 863300;
total = 1200006;
};
continent = Europe;
country = Germany;
day = "2020-12-08";
deaths = {
"1M_pop" = 233;
new = "+380";
total = 19539;
};
population = 83900328;
tests = {
"1M_pop" = 347331;
total = 29141172;
};
time = "2020-12-08T09:15:08+00:00";
}
);
results = 1;
}
您知道如何获取实际案例编号,例如新案例的编号吗
到目前为止,我尝试了以下(错误抛出)方法:
if let responseDict = result as? NSDictionary {
if let data = responseDict.value(forKey: "response") as?
[NSDictionary] {
// Get case numbers
guard let cases = data[0]["cases"] else { return }
guard let casesPerOneMil = cases[0] as! Int else { return }
print(casesPerOneMil)
}
}
基本上不要在Swift中使用NS…
集合类型,使用本机类型。
不要使用值(forKey
),使用密钥订阅
您必须将Any
条件向下转换为预期的具体类型
还有一个错误:cases
的对象是一个字典,请注意{}
,您还必须通过密钥订阅获取casesperonemi
的值
if let responseDict = result as? [String:Any],
let dataArray = responseDict["response"] as? [[String:Any]],
let firstDataItem = dataArray.first {
// Get case numbers
guard let cases = firstDataItem["cases"] as? [String:Any] else { return }
guard let casesPerOneMil = cases["1M_pop"] as? Int else { return }
print(casesPerOneMil)
}
}
有人尝试过吗?你知道字典和数组是如何工作的吗?如何用一个键访问字典的值?如果有,JSON只是字典、数组、字符串、数字(和null)。所以只需从let response=JSON[“response”]
开始(这是一个响应数组)等。但是,Codable
可能是一个好主意。抱歉–我已经在问题中包含了我迄今为止尝试过的内容!要进行调试,您需要知道iscases
nil?iscasesperoneni
nil?甚至抛出一个错误来崩溃(我不会使用as!
,但as?
),如果是这样的话,错误消息是什么?但显然cases
是一个字典而不是数组。因此cases[0]
应该崩溃,并在控制台中给出一个预期的错误消息。它应该是cases[“1M_pop”]
而不是。守卫让casesperonemi=cases[“1M_pop”]as!Int else{return}
返回类型为“Any”的值没有下标的