我正在尝试根据YouTube上的一个教程从API获取数据,我完全按照视频的方式操作,但预览不知何故崩溃了。但是当我注释掉Api().getPosts时,预览能够再次恢复。如果这行代码出错,我该如何改写呢?
用户界面代码:
import SwiftUI
struct ContentView: View {
@State var posts: [Post] = []
var body: some View {
VStack {
List(posts) { post in
Text(post.title)
}
.onAppear{
Api().getPosts { (posts) in
self.posts = posts
}
}
}//:VSTACK
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Api服务代码:
import SwiftUI
struct Post: Codable, Identifiable {
var id = UUID()
var title: String
var body: String
}
class Api {
func getPosts(completion: @escaping([Post]) -> ()) {
guard let url = URL(string: "https://jsonplaceholder.typicode.com/posts") else { return
print("Something occured!")
}
//CALL
URLSession.shared.dataTask(with: url) { data, response, error in
let posts = try! JSONDecoder().decode([Post].self, from: data!)
DispatchQueue.main.async {
completion(posts)
}
print(posts)
}//:URLSESSION
.resume()
}
}
将此代码用于您的Post
模型:
struct Post: Codable, Identifiable {
// let id = UUID() // <-- or this
var id: Int // <-- here
var title: String
var body: String
}
上一篇:Adobe Reader无法打开pdf,因为它不是受支持的文件类型或文件已损坏因为它、文件类型、无法打开、不是
下一篇:Reaction Use Effect引发错误:无法对卸载的组件执行Reaction状态更新组件、状态、错误、Reaction