【问题标题】:Update view whenever document is added - Swift - Firebase Firestore每当添加文档时更新视图 - Swift - Firebase Firestore
【发布时间】:2021-04-24 13:32:58
【问题描述】:

我想在将新文档添加到集合时更新 UI:这是棘手的部分,因为使用此代码:

db.collection("Messages").addSnapshotListener { querySnapshot, error in
    guard let snapshot = querySnapshot else {
        print("Error fetching snapshots: \(error!)")
        return
    }
    snapshot.documentChanges.forEach { diff in
        if (diff.type == .added) {
            print("New document: \(diff.document.data())")
        }
    }
}

我收到了所有收藏的第一手文件。那么如何根据添加的文档更新视图呢?

【问题讨论】:

  • 添加监听器。
  • 已经在做,你看到的代码在监听器里面
  • 我们看不到。
  • 我更新了它,现在请解释一下您的“添加侦听器”语句是什么意思。我仍然收到来自查询的所有文档

标签: swift firebase google-cloud-firestore collections document


【解决方案1】:

如果您要呈现可变数量的元素,那么您可以使用UITableViewUICollectionView,如果您已经是并且您已经收到了新数据元素的集合并且您只想展示其中的一些元素,那么您可以过滤你想显示的那些,更新你的数据源,通常是一个数组,然后在集合视图上调用reloadData

它不应该在forEach 中完成,否则你将有很多重新加载,你应该将它们保持在最低限度,因此首先filter > assign > reload

如果对您有帮助,您可以take look at this Apple documentation

【讨论】:

  • 我已经在使用 collectionView,我的问题更多是关于如何知道将哪个文档添加到 firestore 集合中,以便我可以相应地更新 UI
  • 那么我相信你想要的就是我在答案中的链接中分享的。将您的集合视图与 Firestore 中的新集合视图进行比较,并将它们进行比较,并判断发生了什么变化并随着变化而更新
【解决方案2】:

您是否使用某种框架来观察变化?例如,如果您使用 RxSwift 并通过 observables 观察到文档更改,则可以轻松更新 .subscribe 部分中的 UI。

【讨论】:

  • 我没有使用任何框架,只是 Firestore API
  • @StackGU 您要更新哪种视图?它是 tableView 还是 CollectionView 还是什么?我们需要更多的上下文。 ** 编辑:我在其他评论中看到了回复。在您的案例“消息”中,您正在执行特定集合的请求。您在解析此信息的数据库中是否为此模型定义了某种 DTO?如果您不想接收该集合中的所有文档,则必须过滤它们。看看这个firebase.google.com/docs/firestore/query-data/queries#swift
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-05
  • 2020-03-08
  • 2020-07-27
  • 2020-01-20
  • 1970-01-01
  • 2019-09-01
  • 2018-09-15
相关资源
最近更新 更多