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 中不可见的主要内容,如果未能解决你的问题,请参考以下文章