Verty00
Verty00

Reputation: 743

Get item out of array in Swift

I'm very new to Swift and have spent several hours just trying to pull the photo_url key out of a JSON response.

I'm using this for the reading the JSON:

let jsonDictionary = try JSONSerialization.jsonObject(with: data, options: .mutableContainers)

Then:

                if let eventsDictionary = jsonDictionary {
                    let upcomingEvents = UpcomingEvents(eventsDictionary: eventsDictionary)
                    completion(upcomingEvents)
                } else {
                    completion(nil)
                }

Here is my (failed) attempt to pull out the key:

init(eventsDictionary: [String : Any]) {
    //photoUrl = eventsDictionary[EventKeys.photoUrl] as? String
    let groups: NSArray = eventsDictionary["groups"] as! NSArray
    let url: String = groups[0]
   print("THIS IS YOUR RETURNED PHOTO URL--\(url)--END OF RETURNED PHOTO URL")
}

enter image description here

I changed "[String: Any]" to [String: AnyObject] and now i get this... enter image description here

Upvotes: 1

Views: 105

Answers (4)

muazhud
muazhud

Reputation: 954

You need to read json as `[String: Any].

 if let eventsDictionary = json as? [String: Any] {
     let upcomingEvents = UpcomingEvents(eventsDictionary: eventsDictionary)
     completion(upcomingEvents)               
 }

Then, init your UpcomingEvents model like this

init(eventsDictionary: [String : Any]) {
    let groups: NSArray = eventsDictionary["groups"] as! NSArray
    let group1 = groups[0] as! NSDictionary
    let photoURL = group1["photo_url"] as! String
    print(photoURL)
}

Upvotes: 0

Dev.Faith
Dev.Faith

Reputation: 59

To get "photo_url" from the json file in your photo,

it looks like this:

init(eventsDictionary: [String : Any]) {
   if let groups = eventsDictionary["groups"] as? [NSDictionary]{
        /*
        // Get All URL
        var urls : [String] = []
        for group in groups{
            if let url = group.value(forKey: "photo_url"){
                urls.append(url)
            }
        }
        */

        // Groups[0] url
        let url: String = groups[0].value(forKey: "photo_url") as! String
        print("THIS IS YOUR RETURNED PHOTO URL--\(url)--END OF RETURNED PHOTO URL")
    }
}

Upvotes: 0

Lumialxk
Lumialxk

Reputation: 6369

Try to get url use following code.

let firstObj  = groups[0] as! [String: String] // use if let to unwrap is better
let url = firstObj["photo_url"]

Upvotes: 0

There are problems casting Any to NSArray. Just make your Init method taking [String:AnyObject]. But, better use Array instead of NSArray here

Upvotes: 2

Related Questions