SwiftUI中ForEach过滤布尔值问题:仅显示true项失败
解决SwiftUI ForEach显示所有条目问题
嘿,我一眼就发现问题所在啦——你当前的代码只是遍历了数组的所有索引,完全没对show属性做过滤判断,所以不管show是true还是false,所有条目都会被渲染出来!
解决方案1:先过滤数组再遍历(推荐)
既然你的txt结构体已经遵循了Identifiable协议,我们可以先通过filter方法筛选出show为true的元素,再用ForEach遍历这个过滤后的集合,代码更简洁高效:
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 { // 先过滤出show为true的元素,再遍历 ForEach(array.filter { $0.show }) { item in Text(item.text) } } } } }
解决方案2:遍历索引时添加条件判断
如果你一定要保留遍历索引的写法,那可以在ForEach内部加上if判断,只渲染show为true的条目:
ForEach(array.indices, id: \.self) { idx in if self.array[idx].show { Text("\(self.array[idx].text)") } }
不过这种方式的效率不如第一种,因为ForEach还是会遍历数组的所有索引,只是跳过不符合条件的渲染逻辑。
小建议:遵循Swift命名规范
顺便提一句,Swift里结构体的命名建议采用大驼峰命名法,比如把txt改成Txt,这样代码的可读性会更好哦!
内容的提问来源于stack exchange,提问作者dankell
相关产品推荐
相关产品推荐

