繁体   English   中英

SwiftUI - 如果在 ForEach 循环中

[英]SwiftUI - If inside ForEach loop

我正在根据我之前获取的数组中的元素构建一个列表。

我正在获取所有实体......当用户在搜索栏中进行搜索时,我想过滤我的列表。 我不是在做一个新的 FetchRequest,我只是想过滤我的对象。

这是我目前使用的代码:

List(selection: $selectedDocument)
{
    ForEach(self.documentItems, id: \.self) { document in
        HStack(spacing: 0)
        {
            if (self.checkSearchString(document: document))
            {
                ListRow(document: document).tag(document)
            }
    }

我有一个列表,然后是我的 ForEach 循环。 在那个循环中,我想决定是否显示该元素。 问题是,即使我不想显示元素,我的列表中仍然有一个小视图。 我知道为什么,这是因为我仍然呈现HStack() 我基本上需要将HStack()拖到我的If ,但这对我不起作用。 我认为这是因为我需要在我的列表中呈现一个视图。 但是如何在不渲染某些内容的情况下继续我的ForEach

这就是我想要实现的目标,但它不起作用:

 List(selection: $selectedDocument)
 {
     ForEach(self.documentItems, id: \.self) { document in
         if (self.checkSearchString(document: document))
         {
             HStack(spacing: 0)
             {
                 ListRow(document: document).tag(document)
             }
         }

提前致谢!

在将数据传递给 ForEach 构造函数之前过滤数据。

ForEach(self.documentItems.filter {self.checkSearchString(document: $0)}, id: \.self) { document in
    HStack(spacing: 0)
        {
            ListRow(document: document).tag(document)
        }
}

您需要使用Group来包装由条件提供的不同视图,如下所示

 ForEach(self.documentItems, id: \.self) { document in
   Group {
     if (self.checkSearchString(document: document))
     {
         HStack(spacing: 0)
         {
             ListRow(document: document).tag(document)
         }
     }
     else 
     {
        EmptyView()
     }
   }
 }
List(selection: $selectedDocument)
{
    ForEach(self.documentItems, id: \.self) { document in

       self.checkSearchString(document: document) ?  extractedHstack() : emptyView()

    }

提取您的 hstack 并使用带有空视图的三元组。 让我知道这是否有效,我是从内存中做到的,这台计算机上没有 IDE。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM