首页 > 解决方案 > 如何在 SwiftUI 中的视图中正确过滤和迭代

问题描述

我正在使用 Swift 5,并且有一个 struct model (Book: userId, category, title) ,它通过 Repository 类存储在 Firedbase 中,并通过 Book List 视图(利用 Book Cell 子视图)访问。

BookList 和 Book Cell 都具有视图模型,我将其用于通过观察对象访问视图中的所有数据并从 VM 发布。

以最简单的形式,在 VM 的初始化时,我调用存储库并获取某个 userId 的所有书籍,这工作正常。

我的目标是能够显示每个书籍类别的部分/轮播。这就是我跌倒并完全卡住的地方(我相信这也很简单,这令人沮丧:))

  1. 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
        ...
}
  1. 有没有更好的方法来从视图到 VM -> 存储库的调用中获取过滤的结果集(而不是一直过滤整个集合)?我尝试了一个直接的 func 调用,它没有返回任何内容并且正在为为什么而苦苦挣扎(怀疑这是我对异步东西如何工作的缺乏了解?欣赏这部分有点含糊,但任何指向可以解释这一点的东西的指针都是非常感谢,我用谷歌搜索了我能想到的一切!

希望一切都有意义,并感谢您的任何帮助和指导!

标签: iosswiftswiftuiswift5

解决方案


推荐阅读