SwiftUI - Как добавить и отобразить данные JSON - PullRequest
0 голосов
/ 14 апреля 2020

Я играю с API Instagram и столкнулся со следующей проблемой: мне удалось декодировать и получить доступ к данным JSON, но при попытке доступа к определенному значению в представлении SwiftUI я обнаружил следующую ошибку: Поток 1: Неустранимая ошибка: индекс вне диапазона. Я полностью осознаю, что это вызвано тем, что загрузка API является асинхронной, но я не могу найти решение для этого.

Буду очень признателен за вашу помощь

Ниже вы можете найти ответ API

API RESPONSE

Здесь вы можете найти моя модель и JSON декодер

struct InstaAPI: Codable {

    var name: String
    var period: String
    var description: String
    var values: [ValueResponse]
}

struct ValueResponse: Codable {
    let value: String
}

struct Entry: Codable {
    let data: [InstaAPI]
}

class getData: ObservableObject {

@Published var response = [Entry]()

init() {

    downloadJSON(from: URL(string: "https://graph.facebook.com/v6.0/17841402116620153/insights?metric=impressions&period=day&access_token=accounttoken")!)
}

func downloadJSON(from url: URL) {

    URLSession.shared.dataTask(with: url) { data, response, error in

        if let data = data {

            let jsonDecoder = JSONDecoder()

            do {

                let parsedJson = try jsonDecoder.decode(Entry.self, from: data)

                DispatchQueue.main.async {

                    self.response.append(parsedJson)
                }

                for data in parsedJson.data {

                    print(data.values[0].value)
                }

            } catch {
                print(error)
            }
        }

    }.resume()
}
}

error

1 Ответ

1 голос
/ 14 апреля 2020

может быть, по старинке, если бы сделал трюк:

struct ContentView: View {
@ObservedObject var response = getData()
@State var responseNdx = 0
@State var dataNdx = 0

var body: some View {
    VStack {
        if responseNdx < self.response.response.count {
            if dataNdx < self.response.response[responseNdx].data.count {
                Text(self.response.response[responseNdx].data[dataNdx].name)
            }
        }
    }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...