arrays - 索引超出范围 SwiftUI

标签 arrays swiftui

我已经声明了一个结构,它应该有一个 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/

相关文章:

Swiftui macos 图像作为按钮渲染为小按钮顶部的图像

SwiftUI @FetchRequest 对关系的核心数据更改不刷新

java - Android Java.util.Arrays 类

带有子字符串的 Java 数组 - 字符串索引超出范围异常

java - Java 中的多维数组与 for 函数 - Schildt

swift - 如何在 Swift UIKit Map 组件中处理 SwiftUI 中的触摸手势?

ios - SwiftUI 上的 NavigationLink 推送 View 两次

子数组的Java长度

c - 如何修复 'request for member in something not a structure or union'错误?

图像未出现在 SwiftUI 中