Данные, возвращаемые из API, всегда равны нулю? - PullRequest
1 голос
/ 11 ноября 2019

Я получаю данные из API. Проблема в том, что данные всегда возвращаются как ноль. Это список вопросов, обычно 10. Код, который я написал, всегда возвращает 10 нулевых результатов. Я пробовал один и тот же код с разными API с одинаковой структурой, и он всегда работает.

Это структура:

struct Questions: Codable{
    let question: String?
}

Это код:

guard let url = URL(string: "http://adminsapi.somee.com/Api/Test/?id=1") else { return }
    URLSession.shared.dataTask(with: url) { (data, response, error) in
        guard let data = data else { return }
        do{
            let test = try? JSONDecoder().decode([Questions].self, from: data)
            for ask in test{
                print(ask.question)
            }
        }
    }.resume()

Вот результат, который я получаю:

nil nil nil nil nil nil nil nil nil nil

Это данные, возвращаемые API в почтальоне:

[
    {
        "AskName": "Urgenct of defecation"
    },
    {
        "AskName": "Mucous and streaked stools"
    },
    {
        "AskName": "vomiting"
    },
    {
        "AskName": "Fever"
    },
    {
        "AskName": "Tympany on percussion"
    },
    {
        "AskName": "Bowel sounds"
    },
    {
        "AskName": "shifting dullness"
    },
    {
        "AskName": "psoas and obturator sign"
    },
    {
        "AskName": "rebound tenderness"
    },
    {
        "AskName": "signs of shock"
    }
]

Кроме того, когда я пытаюсь проанализировать json и прочитать весь текстданные в одну строку, это работает совершенно нормально. Я не знаю, где проблема.

1 Ответ

0 голосов
/ 11 ноября 2019

Edited. Структура вашего вопроса неверна. Вот рабочий код игровой площадки, который правильно анализирует результаты.

import UIKit
import PlaygroundSupport

let data = """
[
    {
        "AskName": "Urgenct of defecation"
    },
    {
        "AskName": "Mucous and streaked stools"
    },
    {
        "AskName": "vomiting"
    },
    {
        "AskName": "Fever"
    },
    {
        "AskName": "Tympany on percussion"
    },
    {
        "AskName": "Bowel sounds"
    },
    {
        "AskName": "shifting dullness"
    },
    {
        "AskName": "psoas and obturator sign"
    },
    {
        "AskName": "rebound tenderness"
    },
    {
        "AskName": "signs of shock"
    }
]
""".data(using: .utf8)!

struct Questions: Codable{
    let AskName:String
}

do {
    try JSONDecoder().decode([Questions].self, from: data)
} catch {
    print(error)
}

Вы также можете определить его как:

struct Questions: Codable {
    let question: String

    private enum CodingKeys: String, CodingKey {
        case question = "AskName"
    }
}
...