从API获取数据时预览崩溃 [英] Preview Crashed when I get data from api

查看:0
本文介绍了从API获取数据时预览崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试根据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
}

这篇关于从API获取数据时预览崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆