解析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
可能是一个好主意。抱歉–我已经在问题中包含了我迄今为止尝试过的内容!要进行调试,您需要知道is
cases
nil?is
casesperoneni
nil?甚至抛出一个错误来崩溃(我不会使用
as!
,但
as?
),如果是这样的话,错误消息是什么?但显然
cases
是一个
字典
而不是数组。因此
cases[0]
应该崩溃,并在控制台中给出一个预期的错误消息。它应该是
cases[“1M_pop”]
而不是。
守卫让casesperonemi=cases[“1M_pop”]as!Int else{return}
返回类型为“Any”的值没有下标的