【问题标题】:SwiftUI - How to append and display nested JSON DataSwiftUI - 如何附加和显示嵌套的 JSON 数据
【发布时间】:2020-07-26 15:52:37
【问题描述】:

我正在使用 Instagram API,但遇到以下问题:我设法解码和访问 JSON 数据,但是当我尝试访问 SwiftUI 视图中的某个值时,我遇到以下错误:线程 1:致命错误: 索引超出范围。我完全知道这是由 API 加载是异步的事实触发的,但我找不到解决此问题的方法。

非常感谢您的帮助

您可以在下面找到 API 响应

在这里你可以找到我的模型和 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()
}
}

【问题讨论】:

    标签: json swift xcode api swiftui


    【解决方案1】:

    也许老式的 if 可以解决问题:

    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)
                }
            }
        }
    }
    }
    

    【讨论】:

    • 这就像一个魅力!非常感谢!非常感谢您的时间和帮助
    猜你喜欢
    • 1970-01-01
    • 2021-10-31
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多