簡體   English   中英

使用 Alamofire 和 Swift 5 時無法獲取鍵的值

[英]Unable to get the value of a key while using Alamofire and using Swift 5

以下是我使用 Alamofire 調用 GET api 以獲取列車詳細信息的代碼:

var url:String!
    url = "https://api.railwayapi.com/v2/name-number/train/bhopal/apikey/iixp5yxd/"
    Alamofire.request(url, method: .get, encoding: JSONEncoding.default)
        .responseJSON { response in

            switch response.result {

            case .success(let json):
                print(json)
                if let json = response.result.value as? [String:Any] {
                    print(json["train"]!)
                    if let nestedDictionary1 = json["train"] as? [String: AnyObject] {
                        // access individual value in dictionary

                        if let views = nestedDictionary1["number"] as? String {
                             print(views)
                        }

                        if let classes = nestedDictionary1["classes"] as? [String: AnyObject] {
                             print(classes)
                        }
                    }
                }
                DispatchQueue.main.async {

                 // handle your code

               }
            case .failure(let error):
                print(error)
            }
    }

print(json)行,我收到以下 JSON 響應:

{
debit = 1;
"response_code" = 200;
train =     {
    classes =         (
                    {
            available = N;
            code = 2S;
            name = "SECOND SEATING";
        },
                    {
            available = N;
            code = FC;
            name = "FIRST CLASS";
        },
                    {
            available = Y;
            code = 2A;
            name = "SECOND AC";
        },
                    {
            available = N;
            code = 3E;
            name = "3rd AC ECONOMY";
        },
                    {
            available = Y;
            code = SL;
            name = "SLEEPER CLASS";
        },
                    {
            available = N;
            code = CC;
            name = "AC CHAIR CAR";
        },
                    {
            available = Y;
            code = 3A;
            name = "THIRD AC";
        },
                    {
            available = Y;
            code = 1A;
            name = "FIRST AC";
        }
    );
    days =         (
                    {
            code = MON;
            runs = Y;
        },
                    {
            code = TUE;
            runs = Y;
        },
                    {
            code = WED;
            runs = Y;
        },
                    {
            code = THU;
            runs = Y;
        },
                    {
            code = FRI;
            runs = Y;
        },
                    {
            code = SAT;
            runs = Y;
        },
                    {
            code = SUN;
            runs = Y;
        }
    );
    name = "SHAN-E- BHOPAL EXP";
    number = 12156;
};

}

我應該如何提取鍵“類”的值和“類”的相應鍵。 我在上面的代碼中使用了它,但不幸的是它不起作用:

if let classes = nestedDictionary1["classes"] as? [String: AnyObject] {
                             print(classes)
                        }

由於我是 Alamofire 的新手,請告訴我哪里出錯了以及如何解決這個問題?

閱讀輸出。 JSON 只有兩種集合類型,數組[] (在輸出() )和字典{}

所以關鍵classes的值顯然是一個數組( [[String:Any]] ),JSON 未指定的值總是Any ,從不AnyObject

並且請使用更具描述性的變量名稱。

if let json = response.result.value as? [String:Any] {

    if let train = json["train"] as? [String: Any] {
        print(train)
        // access individual value in dictionary

        if let number = train["number"] as? String { // more likely `Int`
             print(number)
        }

        if let classes = train["classes"] as? [[String: Any]] {
             for aClass in classes {
                 let name = aClass["name"] as! String
                 let available = aClass["available"] as! String
                 print(name, available)

             }
        }
    }
}

不過考慮使用Codable協議。 更方便更高效

暫無
暫無

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

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