【问题标题】:Even and Odd rows using ForEach (SwiftUI)使用 ForEach (SwiftUI) 的偶数行和奇数行
【发布时间】:2020-03-03 00:47:00
【问题描述】:

在 ForEach 循环中区分偶数行和奇数行的最佳方法是什么?循环的内容不是数字(即用户结构),它可以使用搜索短语进行过滤(我认为仅使用数组中的项目索引不适用于这种方式)。我需要更改那些行的颜色。

【问题讨论】:

    标签: list foreach swiftui


    【解决方案1】:

    如果我正确理解问题,您可以使用数据数组的索引并检查奇数行的条件index % 2 == 1(因为索引从 0 开始)。对于过滤后的数据,我建议计算值:

    import SwiftUI
    import Combine
    
    struct HighlightingRowData: Identifiable {
        let id = UUID()
        let title: String
    }
    
    final class SomeData: ObservableObject {
        @Published var data: [HighlightingRowData] = [HighlightingRowData(title: "R. Martin"), HighlightingRowData(title: "McConell"), HighlightingRowData(title: "London"), HighlightingRowData(title: "London")]
    }
    
    struct HighlitedRowsInList: View {
    
        @EnvironmentObject var someData: SomeData
        @State private var searchedText = ""
        private var filteredData: [HighlightingRowData] {
            return searchedText == "" ? someData.data : someData.data.filter { $0.title.contains(searchedText) }
        }
    
        var body: some View {
    
            List {
    
                TextField("filter", text: $searchedText)
    
                ForEach(filteredData.indices, id: \.self) { rowIndex in
                    HStack {
                        Text(self.filteredData[rowIndex].title)
                        Spacer()
                    }
                        .background(rowIndex % 2 == 1 ? Color.yellow : Color.clear)
                }
    
            }
        }
    }
    
    struct HighlitedRowsInList_Previews: PreviewProvider {
        static var previews: some View {
            HighlitedRowsInList()
                .environmentObject(SomeData())
        }
    }
    
    

    您可以使用以下代码实现类似的功能:

    【讨论】:

      猜你喜欢
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 2013-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多