JSON 列表在 SwiftUI 中不可见

Posted

技术标签:

【中文标题】JSON 列表在 SwiftUI 中不可见【英文标题】:JSON list not visible in SwiftUI 【发布时间】:2021-01-06 14:18:22 【问题描述】:

我正在尝试从我创建的 JSON 加载内容,但不幸的是它不起作用。 正如您从下面的代码中看到的那样,我看到的唯一内容是控制台中打印的“错误”。 我还尝试使用来自网络的其他 JSON,相应地更改结构,它可以工作,但不适用于我创建的 JSON。

代码如下:

import SwiftUI
import URLImage

struct Busso: Codable, Identifiable 
    public var id: UUID
    public var titolo: String
    public var autore: String
    public var testo: String
    public var data: String
    public var extra1: String
    public var extra2: String
    public var foto: String
    public var fotoUrl: String


class FetchBusso: ObservableObject 

    @Published var Bussos = [Busso]()
    
    init() 
        let url = URL(string: "https://geniuspointfrezza.altervista.org/index.php?json=1")!

        URLSession.shared.dataTask(with: url) (data, response, error) in
            do 
                if let bussoData = data 

                    let decodedData = try JSONDecoder().decode([Busso].self, from: bussoData)
                    DispatchQueue.main.async 
                        self.Bussos = decodedData
                    
                 else 
                    print("No data")
                
             catch 
                print("Error")
            
        .resume()
    


struct CategoryView: View 
    
    @ObservedObject var fetch = FetchBusso()
    var body: some View 
        VStack 
            List(fetch.Bussos)  todo in
                VStack(alignment: .leading) 
                    Text(todo.titolo)
                
            
        
    



struct CategoryView_Previews: PreviewProvider 
    static var previews: some View 
        CategoryView()
    

这是我要使用的 JSON 的链接:

https://geniuspointfrezza.altervista.org/index.php?json=1

等待您的建议,谢谢!

【问题讨论】:

【参考方案1】:

Json 我抛出该网站来帮助您阅读。您可以在遇到困难时获得帮助。shttps://app.quicktype.io

【讨论】:

谢谢!很好用,以后肯定会用到……【参考方案2】:

问题是

public var id: UUID 你的 JSON 是 public var id: String

catch 
    print(error)

更有用
print("Error")

【讨论】:

完美!我花了几个小时寻找问题,最后这是一件愚蠢的事情,但由于我刚刚开始,你知道......【参考方案3】:

您的 Busso 结构不是给定 JSON 的正确解码器。正如我给你的the link 给你的我之前的一个答案,它解释了如何获得一个可以解析你的数据的结构。您确实需要查看它,但为了解决这个问题,结构应该是:

// MARK: - GeniuspointfrezzaDecoder
struct GeniuspointfrezzaDecoder: Codable 
    let id: String?
    let titolo: String?
    let autore: String?
    let testo: String?
    let data: String?
    let extra1: String?
    let extra2: String?
    let creazione: String?
    let foto: String?
    let fotoURL: String?

    enum CodingKeys: String, CodingKey 
        case id, titolo, autore, testo, data, extra1, extra2, creazione, foto
        case fotoURL = "fotoUrl"
    

我将元素全部设为可选,因为您实际上并不知道服务器响应是否包含所有元素。您遇到的另一个问题是将解码器中的 id 声明为 UUID,而 JSON 响应显然是一个字符串。必须在解码响应之后将响应数据更改为您的应用程序的需要。解码器不是您的 Busso 结构。它是一个解码器,可为您提供要放入 Busso 结构的数据。

【讨论】:

非常有帮助,尤其是可选部分...现在完美运行...非常感谢!

以上是关于JSON 列表在 SwiftUI 中不可见的主要内容,如果未能解决你的问题,请参考以下文章

下拉列表在 Firefox 中不可见

在 vuejs 中不使用导入使 JSON 从页面可见

进度可见性在列表视图页脚中不起作用

数据模型表在数据透视表字段列表中可见,但在数据模型本身中不可见 - Excel 2016

点击 SwiftUI 时从列表中删除

在 SwiftUI 列表中显示 JSON 字典