Search code examples
swiftxcodenetwork-programmingalamofire

Parsing through array of dictionaries with Alamofire 4.0 and Swfit 3


I was wondering how to parse to, get all data from API within Alamofire.

Here is the code that downloads just a one Dictionary of data from API. How can I download other things from it?

Here is screenshot from JSONFormatter:

https://i.sstatic.net/r33jG.jpg

func downloadJsonData (completed: @escaping DownloadCompleted) {
    Alamofire.request(url, method: .get).responseJSON { response in
        let result = response.result.value
        if let dict = result as? [Dictionary<String,AnyObject>] {

            if let id = dict[0]["id"] as? String {
                self._id = id
                print("@@@\(self._id)")
            }

            if let name = dict[0]["name"] as? String {
                self._name = name
                print("@@@\(self._name)")
            }

            if let avatar = dict[0]["avatar"] as? String {
                self._avatar = avatar
                print("@@@\(self._avatar)")
            }

            if let lat = dict[0]["lat"] as? Float {
                self._lat = lat
                print("@@@\(self._lat)")
            }

            if let lng = dict[0]["lng"] as? Float {
                self._lng = lng
                print("@@@\(self._lng)")
            }
        }
    }
    completed()
}

Solution

  • func downloadJsonData (completed: @escaping DownloadCompleted) {
        Alamofire.request(url, method: .get).responseJSON { response in
            if let collectionData = response.result.value as? [[String:AnyObject]] {
                let collection : [YourStruct] = collectionData.flatMap { data in
                    guard let id = data["id"] as? String,
                        let name = data["name"] as? String,
                        let avatar = data["avatar"] as? String,
                        let lat = data["lat"] as? Float,
                        let lng = data["lng"] as? Float
                    else {
                        return nil
                    }
    
                    return YourStruct(id:id, name:name, avatar:avatar, lat:lat, lng:lng)
                }
            }
        }
        completed()
    }
    

    And now you have a collection of your object. And with it you can do what you want