使用 ForEach (SwiftUI) 的偶数行和奇数行
Posted
技术标签:
【中文标题】使用 ForEach (SwiftUI) 的偶数行和奇数行【英文标题】:Even and Odd rows using ForEach (SwiftUI) 【发布时间】:2020-03-03 00:47:00 【问题描述】:在 ForEach 循环中区分偶数行和奇数行的最佳方法是什么?循环的内容不是数字(即用户结构),它可以使用搜索短语进行过滤(我认为仅使用数组中的项目索引不适用于这种方式)。我需要更改那些行的颜色。
【问题讨论】:
【参考方案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())
您可以使用以下代码实现类似的功能:
【讨论】:
以上是关于使用 ForEach (SwiftUI) 的偶数行和奇数行的主要内容,如果未能解决你的问题,请参考以下文章
Swiftui 如何在 foreach 循环中对整行使用 Tap Gesture