大家好,我是 Swift 的新手,我尋求幫助,為什么資料沒有顯示在 List 中?請幫我修復它。我制作了一個模型資料,并從 URl 中獲取資料并決議它
我的型號:
struct ResponseData: Codable{
var userId: String
var id: String
var title: String
var body: String
}
我在內容視圖中的代碼:
import SwiftUI
struct ContentView: View {
@State var responseData = [ResponseData]()
var body: some View {
List(responseData, id: \.id ) { item in
Text("\(item.body)")
}
.task {
await loadData()
}
}
func loadData () async {
let urlString = "https://jsonplaceholder.typicode.com/posts"
guard let url = URL(string: urlString) else { return }
URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let data = data else {return}
guard error == nil else {return}
do {
let postData = try JSONDecoder().decode(ResponseData.self, from: data)
} catch let error {
print(error)
}
}.resume()
}
}
uj5u.com熱心網友回復:
代碼中有很多問題。
最重要的是
- 在 struct
userId和idare 中Int。 - JSON 根物件是一個陣列,請注意以
[. - 收到資料后不更新模型。
當您使用 async/await 時,請充分利用該模式。
JSON API 回傳posts,那么如何命名結構Post?
struct Post: Codable, Identifiable {
let userId: Int
let id: Int
let title: String
let body: String
}
struct ContentView : View {
@State var posts = [Post]()
var body : some View {
List(posts) { post in
Text(post.body)
}
.task {
do {
posts = try await loadData()
} catch {
print(error)
}
}
}
func loadData() async throws -> [Post] {
let urlString = "https://jsonplaceholder.typicode.com/posts"
let url = URL(string: urlString)!
let (data, _) = try await URLSession.shared.data(for: URLRequest(url: url))
return try JSONDecoder().decode([Post].self, from: data)
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/366620.html
