Получение массива JSON с помощью Alamofire + SwiftyJSON

Я действительно новичок в Swift, извините, если это глупый вопрос... кажется, что есть много вопросов по этому поводу, но ни один из них не использует последнюю версию Alamofire.

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

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

И метод делегата didReceiveAPIResults

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

Вот ответ JSON:

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

Я ожидаю, что debugPrint напечатает что-то похожее на этот JSON, но вместо этого он просто печатает unknown

Если я отлаживаю Print response.data сам по себе, он оказывается закодированным...

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

Тогда моя строка results["items"].arrayObject! имеет эту ошибку:

fatal error: unexpectedly found nil while unwrapping an Optional value

person andrewtweber    schedule 03.12.2015    source источник


Ответы (1)


Вместо того, чтобы брать response.data, я бы предложил взять response.result.value. Когда вы выполняете responseJSON, Alamofire выполняет синтаксический анализ JSON за вас, и вы можете свободно брать этот проанализированный объект.

Alamofire.request(.GET, url)
    .responseJSON { response in
        if let value = response.result.value {
            let json = JSON(value)
            self.delegate?.didReceiveAPIResults(json)
        }
}
person Rob    schedule 03.12.2015
comment
Работает отлично, спасибо. И теперь я довольно ясно вижу response.result.value в документации Alamofire, я просто как-то пропустил это - person andrewtweber; 03.12.2015