gpt4 book ai didi

json - 如何在 swiftUI 中显示 JSON 数据

转载 作者:行者123 更新时间:2023-11-30 10:32:21 32 4
gpt4 key购买 nike

我在 SwiftUI 中显示 JSON 数据时遇到问题,我从 Genius API 获取数据,我当前正在搜索歌曲,并且可以确认我是否正确提取了数据;例如我可以打印出结果的标题:

enter image description here

这就是我获取数据的方式

class NetworkManager: ObservableObject {
var objectWillChange = PassthroughSubject<NetworkManager, Never>()

var fetchedSongsResults = [hits]() {
willSet {
objectWillChange.send(self)
}
}

init() {
fetchSongs()
}

func fetchSongs() {
guard let url = URL(string: "https://api.genius.com/search?q=Sia") else { return }
var urlRequest = URLRequest(url: url)
urlRequest.setValue("Bearer TOKEN", forHTTPHeaderField: "Authorization")

URLSession.shared.dataTask(with: urlRequest) {data, response, error in
guard let data = data else { return }
//print(String(decoding: data, as: UTF8.self))
let songs = try! JSONDecoder().decode(feed.self, from: data)
DispatchQueue.main.async {
self.fetchedSongsResults = songs.response.hits

}
}.resume()
}
}

因此,当我获取数据时,我将其保存到变量 fetchedSongsResults 中,这似乎是正确的,但无论出于何种原因,当我尝试打印计数时,例如它说我为空,而且我无法使用 a 循环遍历 fetchedSongsResults list 或 ForEach 就是这样,(我相信是因为我没有使模型可识别)我尝试打印 fetchedSongsResults 的计数,

这在体外初始化(只是为了让你知道)

@State var networkManager = NetworkManager()

这是在体内

Text("\(networkManager.fetchedSongsResults.count)")

如果您想知道当我解码 JSON 数据时我的结构是什么样子,那么这里就是

struct feed: Codable {
var meta: meta
var response: response
}

struct meta: Codable {
var status: Int
}

struct response: Codable {
var hits: [hits]
}

struct hits: Codable {
var index: String
var type: String
var result: song
}

struct song: Codable, Identifiable {
var id: Int
var header_image_thumbnail_url: String
var url: String
var title: String
var lyrics_state: String
var primary_artist: artist

}

struct artist: Codable {
var name: String
}

最佳答案

尝试:@ObservedObject var networkManager = NetworkManager()。

关于json - 如何在 swiftUI 中显示 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58882952/

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