Предыдущая версия этого запроса Alamofire .POST и синтаксический анализ SwiftyJSON отлично работает с Swift 2.2 и Xcode 7. Обновлено до Swift 3.0, что требовалось установить обновленный Alamofire (4.0.0) и обновить SwiftyJSON. После некоторых настроек синтаксиса все компилируется.Alamofire 4 Запрос возвращает NSArray, не может понять, как разбираться с SwiftyJSON в Swift 3
Проблема заключается в том, что теперь мое веб-приложение возвращает NSArray, тогда как раньше, когда код работал, почти идентичный запрос получил возврат NSData, который SwiftyJSON будет анализировать. В следующем коде показан запрос:
Alamofire.request("https://www.mywebappurl", method: .post, parameters: parameters)
.responseJSON { (response:DataResponse<Any>) in
if let data = response.result.value as? Data {
Переменная данных никогда не назначается, поскольку тип ответа не является NSData. Пытался бросить к этому типу, изменив последнюю строку на это:
let data = response.result.value as! Data
Эта версия компилируется нормально, но как только вы вызываете запроса вы получите сообщение об ошибке: Не удалось бросить значение типа «__NSArrayI» (0x105a37c08) в «NSData»
Обратите внимание, что запрос возвращает данные, как ожидалось. И в предыдущем Alamofire эти данные были NSData без каких-либо действий по их преобразованию. Поскольку из вышеупомянутой ошибки видно, что возвращенные данные уже являются массивом, уже анализировали ли они Alamofire? Или есть что-то, что можно сделать, чтобы SwiftyJSON разобрал его так, как будто он разбирался раньше?
EDIT
Поскольку текущий тип возвращаются является NSArray, и веб-приложение посылает массив, не представляется возможным, что SwiftyJSON разбор больше не нужен? Попробовал следующий код:
Alamofire.request("https://www.mywebappurl", method: .post, parameters: parameters)
.responseJSON { (response:DataResponse<Any>) in
let testdata = response.result.value as! NSArray
print(testdata[0])
которая дала этот вывод в Xcode «All Output» экран:
{
1 = "08/01/16";
2 = 285;
3 = 160;
}
Это мне не ясно, если это означает, что TestData представляет собой массив массивов, массив словари или массив непарных строк. Таким образом, в качестве альтернативы ответом на вопрос «Как получить ответ NSData из этого запроса Alamofire» ответ на вопрос «Какая одна строка кода, если таковая имеется, может использоваться для получения целочисленного значения 285 из NSArray testdata, показанный выше? " также разрешит проблему.
Получите ли вы веб-службу массив JSON? –
Да, он возвращает JSON-кодированный массив. –