Search code examples
swiftalamofireswifty-json

Getting JSON array with Alamofire + SwiftyJSON


I'm really new to Swift, sorry if this is a dumb question... there seem to be many questions about this but none of them use the latest version of Alamofire

Alamofire.request(.GET, url)
    .responseJSON { response in

    let json = JSON(response.data!)
    debugPrint(json)
    self.delegate?.didReceiveAPIResults(json)
}

And the delegate's didReceiveAPIResults method

func didReceiveAPIResults(results: JSON) {
    dispatch_async(dispatch_get_main_queue(), {
        self.tableData = results["items"].arrayObject!
        self.appsTableView!.reloadData()
    })
}

Here's the JSON response:

{
    "items": [
        {
            "id": 1,
            "name": "Sample 1"
        },
        {
            "id": 2,
            "name": "Sample 2"
        }
    ]
}

I expect the debugPrint to print something similar to that JSON, but instead it just prints unknown

If I debugPrint response.data by itself, it appears to be encoded...

Optional(<7b226461 7461223a 5b7b2269 64223a36 2c226e61 6d6522......

Then my results["items"].arrayObject! line has this error:

fatal error: unexpectedly found nil while unwrapping an Optional value

Solution

  • Rather than grabbing response.data, I'd suggest grabbing response.result.value. When you do responseJSON, Alamofire does the JSON parsing for you, and you should feel free to just grab this parsed object.

    Alamofire.request(.GET, url)
        .responseJSON { response in
            if let value = response.result.value {
                let json = JSON(value)
                self.delegate?.didReceiveAPIResults(json)
            }
    }