lvo*_*mer 8 macos swift swiftui
我正在根据我之前获取的数组中的元素构建一个列表。
我正在获取所有实体......当用户在搜索栏中进行搜索时,我想过滤我的列表。我不是在做一个新的 FetchRequest,我只是想过滤我的对象。
这是我目前使用的代码:
List(selection: $selectedDocument)
{
ForEach(self.documentItems, id: \.self) { document in
HStack(spacing: 0)
{
if (self.checkSearchString(document: document))
{
ListRow(document: document).tag(document)
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个列表,然后是我的 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)
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
在将数据传递给 ForEach 构造函数之前过滤数据。
ForEach(self.documentItems.filter {self.checkSearchString(document: $0)}, id: \.self) { document in
HStack(spacing: 0)
{
ListRow(document: document).tag(document)
}
}
Run Code Online (Sandbox Code Playgroud)
您需要使用Group来包装由条件提供的不同视图,如下所示
ForEach(self.documentItems, id: \.self) { document in
Group {
if (self.checkSearchString(document: document))
{
HStack(spacing: 0)
{
ListRow(document: document).tag(document)
}
}
else
{
EmptyView()
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3089 次 |
| 最近记录: |