Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在SwiftUI的视图中正确过滤和迭代_Ios_Swift_Swiftui_Swift5 - Fatal编程技术网

Ios 如何在SwiftUI的视图中正确过滤和迭代

Ios 如何在SwiftUI的视图中正确过滤和迭代,ios,swift,swiftui,swift5,Ios,Swift,Swiftui,Swift5,我使用的是Swift 5,有一个结构模型(图书:userId、category、title),它通过Repository类存储在Firedbase中,并通过图书列表视图(使用图书单元子视图)访问 BookList和Book Cell都有视图模型,我通过观察对象访问视图中的所有数据并从VM发布 在最简单的形式中,在VM的init上,我调用存储库并获取某个用户ID的所有书籍,这很好 我的目标是能够显示每个图书类别的分区/旋转木马。这就是我摔倒的地方,我被完全卡住了(我相信这也很简单,令人沮丧:) f

我使用的是Swift 5,有一个结构模型(图书:userId、category、title),它通过Repository类存储在Firedbase中,并通过图书列表视图(使用图书单元子视图)访问

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

在最简单的形式中,在VM的init上,我调用存储库并获取某个用户ID的所有书籍,这很好

我的目标是能够显示每个图书类别的分区/旋转木马。这就是我摔倒的地方,我被完全卡住了(我相信这也很简单,令人沮丧:)

  • f我已经在视图模型实例中获得了完整的集合,所以我认为应该对其进行过滤并在结果中进行预处理,但无论我尝试什么都不起作用
  • 举个例子,下面是我认为“应该也许”有效的方法就我所能得到的最接近编译的东西,但最终不起作用。。。(我尝试了许多其他的事情,编译器抱怨类不可散列,我已经陷入了困境,也没有取得任何进展)

  • 是否有更好的方法从视图到VM->Repository的调用中获取过滤结果集(而不是一直过滤整个结果集)?我尝试过一个直接的func调用,它什么也不返回,我正在努力寻找原因(怀疑是我不了解异步的工作原理吗?感谢这一部分有点模糊,但是任何能够解释这一点的指针都将非常感谢,我已经用谷歌搜索了我能想到的一切!)

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

    过滤不是您视图的工作,而是您视图模型的工作。向
    BookListView提供过滤列表,是的,这是我最初采取的路线,我试图将自定义词典传递给视图,但我无法在vi中迭代ew也是,所以我有点不知所措?谢谢@Paulw11,update,我已经切换到传递一个自定义结构,这是可行的-仍然不知道为什么我不能在视图中过滤数组。。。
    
    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
            ...
    }