【发布时间】:2020-03-03 00:47:00
【问题描述】:
在 ForEach 循环中区分偶数行和奇数行的最佳方法是什么?循环的内容不是数字(即用户结构),它可以使用搜索短语进行过滤(我认为仅使用数组中的项目索引不适用于这种方式)。我需要更改那些行的颜色。
【问题讨论】:
在 ForEach 循环中区分偶数行和奇数行的最佳方法是什么?循环的内容不是数字(即用户结构),它可以使用搜索短语进行过滤(我认为仅使用数组中的项目索引不适用于这种方式)。我需要更改那些行的颜色。
【问题讨论】:
如果我正确理解问题,您可以使用数据数组的索引并检查奇数行的条件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())
}
}
您可以使用以下代码实现类似的功能:
【讨论】: