ios - 如何在 SwiftUI 中的视图中正确过滤和迭代
问题描述
我正在使用 Swift 5,并且有一个 struct model (Book: userId, category, title) ,它通过 Repository 类存储在 Firedbase 中,并通过 Book List 视图(利用 Book Cell 子视图)访问。
BookList 和 Book Cell 都具有视图模型,我将其用于通过观察对象访问视图中的所有数据并从 VM 发布。
以最简单的形式,在 VM 的初始化时,我调用存储库并获取某个 userId 的所有书籍,这工作正常。
我的目标是能够显示每个书籍类别的部分/轮播。这就是我跌倒并完全卡住的地方(我相信这也很简单,这令人沮丧:))
- f 我已经在 View Model 实例中获得了完整的集合,所以我认为这应该是过滤并遍历结果的情况,但无论我尝试什么都行不通。
例如,这就是我认为“应该”起作用的方法?/ 与我所要编译的东西一样接近,但最终无法工作......(我尝试了许多其他的东西,编译器抱怨该类不是可哈希的,我已经失败了兔子洞打开了,也没有到任何地方)。
struct BookListView: View {
@ObservedObject var bookListVM = BookListViewModel()
var body: some View {
...
// this doesn't work
ForEach(bookListVM.bookCellViewModels.filter {$0.book.category == "XYZ TEST"}) { example in
let _ = print("DEBUG: \(example.book.heading)")
}
// this does
ForEach(bookListVM.bookCellViewModels) { bookcellVM in
...
}
- 有没有更好的方法来从视图到 VM -> 存储库的调用中获取过滤的结果集(而不是一直过滤整个集合)?我尝试了一个直接的 func 调用,它没有返回任何内容并且正在为为什么而苦苦挣扎(怀疑这是我对异步东西如何工作的缺乏了解?欣赏这部分有点含糊,但任何指向可以解释这一点的东西的指针都是非常感谢,我用谷歌搜索了我能想到的一切!
希望一切都有意义,并感谢您的任何帮助和指导!
解决方案
推荐阅读
- mysql - 根据按日期字段分组获取数据
- optimization - 何时必须/应该在 VHDL 中使用 range 关键字声明变量?
- bittorrent - DHT InfoHash 查找序列。PeerID 与 InfoHash
- windows - 查看所有登录到 Windows 10 计算机的用户
- python - 无法在 Python 中创建超过 2 个 txt.files
- javascript - 底部的 HTML 图像想要顶部
- ldap - Gerrit + LDAP:“无法将用户名“X”分配给帐户 Y;名称不符合“
- apache-spark - 小内存工作节点和性能
- javascript - 将 vanilla JavaScript 中的屏幕/图像缩放到指针单击
- vb.net - VB windows窗体计算多行文本框中的数字