Что означает ошибка «Тип« Любой »не соответствует протоколу« Последовательность », когда я повторяю результат« JSON »? - PullRequest
1 голос
/ 30 марта 2019

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

«Тип« Любой »не соответствует протоколу« Последовательность ».

Это функция, которую я пишу:

func getHistoryData(url: String) {
    Alamofire.request(url).responseJSON { response in
        print("Request: \(String(describing: response.request))")   // original url request
        print("Response: \(String(describing: response.response))") // http url response
        print("Result: \(response.result)")                         // response serialization result

        if let json = response.result.value {
            print("JSON: \(json)") // serialized json response
            for item in json { ***(The error happens here)***

            }
        }

        if let data = response.data, let utf8Text = String(data: data, encoding: .utf8) {
            print("Data: \(utf8Text)") // original server data as UTF8 string
        }
    }
}

Вот пример ответа с веб-страниц:

{
    "average": 4088.82,
    "time": "2019-03-30 15:46:00"
},
{
    "average": 4095.07,
    "time": "2019-03-30 15:45:00"
},
{
    "average": 4094.14,
    "time": "2019-03-30 15:44:00"
},
{
    "average": 4095.64,
    "time": "2019-03-30 15:43:00"
},
{
    "average": 4095.69,
    "time": "2019-03-30 15:42:00"

Как получить все «средние» и сохранить их в массиве?

1 Ответ

0 голосов
/ 30 марта 2019

Это действительно зависит от того, какой тип последовательности вы пытаетесь получить, но по большей части это должно работать.

Измените

for item in json 

на

var jsonparsed = JSON(json);
for item in jsonparsed.array

Исходя из вашего json, это будет выглядеть примерно так:

var averages : [Float] = [];

if let json = response.result.value {
    print("JSON: \(json)") // serialized json response
    var jsonparsed = JSON(json);
    for item in jsonparsed.array {
        if let average = item["average"].float {
            averages.append(average);
        }
    }
}

// do something with the `averages` array.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...