Четные и нечетные строки с использованием ForEach (SwiftUI) - PullRequest
0 голосов
/ 03 марта 2020

Как лучше всего различать guish четные и нечетные строки в ForEach l oop? Содержимое l oop не является числами (т.е. пользовательской структурой), и его можно фильтровать с помощью поисковой фразы (я думаю, использование только индекса элемента в массиве неприменимо). Мне нужно изменить цвет этих строк.

1 Ответ

0 голосов

Если я правильно понимаю вопрос, вы можете использовать индексы вашего массива данных и проверить условие 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())
    }
}

. Вы можете достичь чего-то подобного с этим кодом:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...