来自 api 请求的对象在 ForEach 中打印,但不在 List 中

Posted

技术标签:

【中文标题】来自 api 请求的对象在 ForEach 中打印,但不在 List 中【英文标题】:Object from api request prints in ForEach, but not in List 【发布时间】:2019-11-05 03:48:17 【问题描述】:

我正在尝试创建从 API 请求中收到的对象列表。对象是可识别的。奇怪的是,当我在 ForEach 循环中迭代对象的titles 参数时,它会打印出预期的结果。但是,当我将其更改为列表时,它不会显示任何内容,也不会给出错误或任何其他指示出现问题。我错过了什么?

这是我的对象:

struct Item: Identifiable, Decodable 
    let id = UUID()
    let title: String?
    let canonicalURL: String?
    let unread: Bool?
    let author: String?

    init(title: String?, canonicalURL: String?, unread: Bool?, author: String?)
        self.title = title
        self.canonicalURL = canonicalURL
        self.unread = true
        self.author = author
    

这是我的观点:

@ObservedObject var articlesVM = ArticlesViewModel()

    var body: some View 
        NavigationView
            ScrollView

                ForEach (articlesVM.entries)  entry in
                    Text(entry.title!)
                 //THIS WORKS

                List (articlesVM.entries)  entry in
                    Text(entry.title!)
                 //THIS DOESNT WORK

            .navigationBarTitle("Articles")
            .navigationBarItems(trailing: Button(action: 
                print("Fetching Data")
                self.articlesVM.fetchArticles()
            , label: 
                Text("Fetch Articles")
            ))
        
    

【问题讨论】:

【参考方案1】:

列表本身是可滚动的。试试下面的正文:

var body: some View 
    NavigationView
        List (articlesVM.entries)  entry in
                Text(entry.title!)
        .navigationBarTitle("Articles")
        .navigationBarItems(trailing: Button(action: 
            print("Fetching Data")
            self.articlesVM.fetchArticles()
        , label: 
            Text("Fetch Articles")
        ))
    

【讨论】:

以上是关于来自 api 请求的对象在 ForEach 中打印,但不在 List 中的主要内容,如果未能解决你的问题,请参考以下文章

如何打印来自发布请求的响应

反应式 Swift 使用来自 API 的实时数据 - 需要基本示例

在gridview上用c#显示来自rest api服务器的请求

在 Finagle 中打印来自 GET 请求的 JSON 响应

forEach循环中的Javascript API队列

如何在foreach循环中显示来自PDO的数据