gpt4 book ai didi

arrays - 索引超出范围 SwiftUI

转载 作者:行者123 更新时间:2023-12-04 09:48:01 24 4
gpt4 key购买 nike

我已经声明了一个结构,它应该有一个 id 和一个字面量

struct Lit: Identifiable, Codable {
var id : Int
var literal : String
}

这是我将 JSON 文件解码为列表的代码:
JSON 文件包含 3 项
[{"id":0,"literal":"arda"},{"id":0,"literal":"mecho"},{"id":0,"literal":"dossi"}]
class Literal: ObservableObject {

@Published var lit = [Lit]()

init() {
loadLiteral()
}
func loadLiteral(){

guard let url = URL(string: "http://biobeehive.com/Dossi.json") else {return}

URLSession.shared.dataTask(with: url ) { (data,_,_) in
guard let data = data else {return}

let pokemon200 = try! JSONDecoder().decode([Lit].self, from: data)

DispatchQueue.main.async {
self.lit = pokemon200
print("\(self.lit[0].literal)")
}
}.resume()

}
}

贝娄,我想在索引 0 处打印文字,它应该打印“arda”,但我得到一个错误。( fatal error :索引超出范围:文件),即使我看到所有 3 个项目都存在并且已经通过。
struct ContentView: View {

@ObservedObject var literal = Literal()

var body: some View {

VStack {

Text("\(literal.lit.count)") // Output is 3
Text("\(literal.lit[0].literal)") //Crashing here

}
}

你能告诉我如何解决这个问题吗?

最佳答案

试试这个:

原因:异步加载需要一些时间,并且 View 出现时没有加载数据,所以它因为根本没有数据而崩溃。

struct ContentView: View {

@ObservedObject var literal = Literal()

var body: some View {

VStack {
if literal.lit.count > 0 {
Text("\(literal.lit.count)") // Output is 3
Text("\(literal.lit[0].literal)") //Crashing here
} else {
Text("still loading...")
}
}
}
}

关于arrays - 索引超出范围 SwiftUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62052887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com