SwiftUI:ForEach 过滤器布尔值

Posted

技术标签:

【中文标题】SwiftUI:ForEach 过滤器布尔值【英文标题】:SwiftUI: ForEach filters boolean 【发布时间】:2020-02-09 15:52:26 【问题描述】:

我正在拼命地尝试使用 ForEach 来仅显示值为 true 的内容。无论我尝试什么,也会显示 false 。空气现在已经消失了,我认为这很简单,我只是看不到它。这是一段应该适用的代码:

import SwiftUI

struct txt: Identifiable 
    var id: Int
    var text: String
    var show: Bool


struct ContentView: View 

    @State private var array = [
        txt(id: 000, text: "True", show: true),
        txt(id: 001, text: "True", show: true),
        txt(id: 002, text: "True", show: true),
        txt(id: 003, text: "False", show: false),
        ]

    var body: some View 
        NavigationView 
            List 
                ForEach(array.indices, id: \.self)  idx in
                   Text("\(self.array[idx].text)")
                

            
        
    

【问题讨论】:

【参考方案1】:

像这样更改您的ForEach

ForEach(array)  arr in
     if arr.show 
         Text("\(arr.text)")
     

【讨论】:

啊!这就是我一直在寻找的。我的错误是愚蠢的。谢谢!【参考方案2】:
List(array.filter  $0.show ) (item) in
    Text(item.text)

更新:

let ids = [0,2]
let filteredItems = array.filter  ids.contains($0.id)

为您提供过滤后的集合,其中 仅包含两个项目,其中 Element.id == 0 或 Element.id == 2

array.filter $0.show 是三个项目的集合,其中 Element.show == true

您可以将其用作数据源

List(array.filter  ids.contains($0.id) ) (item) in
    Text(item.text)

它会为每个源集合生成一个文本

这两个条件(或更多)都可以根据需要与任何逻辑运算符一起应用

【讨论】:

谢谢。解决方案中是否有可能额外限制 ForEach?比如只输出id:000和id:001,完全省略002再省略003? 准附加范围。然而,过滤保持原样。

以上是关于SwiftUI:ForEach 过滤器布尔值的主要内容,如果未能解决你的问题,请参考以下文章

当带有过滤器选项的 ForEach 在 Swiftui 中没有显示结果时,如何显示文本?

删除具有绑定布尔值的列表项 - SwiftUI

SwiftUI:过滤的列表索引与新列表不对应

SwiftUI - 如果在 ForEach 循环内

过滤 For Each 循环 - swiftui

过滤 Firebase 数据 SwiftUI