【问题标题】:SWIFT: Index out of range displaying Text but working correctly on PrintSWIFT:索引超出范围显示文本但在打印上正常工作
【发布时间】:2021-09-26 01:17:21
【问题描述】:

我有这个问题。 当我想在控制台上打印我的数组的值时,它可以。但是当我想打印与 Text() 上相同的数组值时,索引超出范围

这是我的代码的一部分

struct VerCajaView: View {

class X1: Codable, Identifiable {
    var operacion: String? = ""
    var fecha: String? = ""
}

class X2: Codable, Identifiable {
    var suma_ars: String? = ""
  

}

class Respuesta: Codable, Identifiable  {
    var movimientos: [X1] = []
    var Sumas : [X2] = []
}

@State var models: [X1] = []
@State var sumato: [X2] = []


var body: some View {
    
    Button(action: {
        print(sumato[0].suma_ars)
    }){
        Text(sumato[0].suma_ars ?? "Start")
    }
    

我也在检索我的 json 响应,例如

 var urlRequest: URLRequest = URLRequest(url: url)
        urlRequest.httpMethod = "GET"
        URLSession.shared.dataTask(with: urlRequest, completionHandler: { (data, response, error) in
           
             
            guard let data = data else {
                print("invalid response")
                return
            }
             
           
            do {
                          
                let resultado = try JSONDecoder().decode(Respuesta.self, from: data)
                self.models = resultado.movimientos
                self.sumato = resultado.Sumas

我的 json 响应是

{"movimientos":[{"id":"26","operacion":"Compra","fecha":"21\/07\/13"},{"id":"27","operacion":"Venta","fecha":"21\/07\/13"},{"id":"28","operacion":"Retiro","fecha":"21\/07\/13"}],"Sumas":[{"suma_ars":"-900"}]}

【问题讨论】:

    标签: arrays json swift indexing swiftui


    【解决方案1】:

    在 SwiftUI 中,视图经常被渲染。

    第一次数组为空,发生crash。

    永远不要从视图呈现区域中索引下标的数组中获取项目

    要么使用first,它返回一个可选的

    Text(sumato.first?.suma_ars ?? "Start")
    

    或进行检查

    Text(sumato.isEmpty ? "Start" : sumato[0].suma_ars)
    

    【讨论】:

    • 我测试了你的代码,它可以工作。我不明白的是为什么不能从视图渲染区域上的索引数组中获取项目。你能解释一下吗?
    • 数组被声明为空数组,并且在数组被填充之前已经可以(并且显然是)第一次渲染视图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 2016-04-19
    相关资源
    最近更新 更多