Как получить индекс элемента внутри цикла ForEach? - PullRequest
1 голос
/ 30 октября 2019

У меня есть массив массивов, через которые я зацикливаюсь. Массив структурирован так, чтобы представлять 4 квартала года:

Q0 январь, февраль, март
Q1 апрель, май, июнь
Q2 июль, август, сентябрь
Q3 октябрь, ноябрьДекабрь

@State var quarters: [[Month]] = [[.init(name: "January"),.init(name: "February"),.init(name: "March")],
                               [.init(name: "April"), .init(name: "May"), .init(name: "June")],
                               [.init(name: "July"),.init(name: "August"),.init(name: "September")],
                               [.init(name: "October"), .init(name: "November"), .init(name: "December")]]

В приведенном ниже HStack я пытаюсь добавить индекс quarter, чтобы я получил Q0, Q1, Q2, Q3

VStack {

    ForEach (self.quarters, id: \.self) { quarter in
        VStack {
        Spacer()
            HStack {

                Text("Q\(quarter.index)")
                .font(.system(size: 40, weight: .black, design: .rounded))

            }
        }
    }
}

Thisне работалЕсть ли способ получить индекс массива внутри массива моего цикла ForEach здесь? Я понимаю, что есть способ получить индекс, если цикл ForEach использует диапазон в качестве своего набора данных, но я не могу, если набор данных является массивом.

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Вы можете пойти по этому пути с перечислимым массивом:

   struct TempView: View{

   @State var quarters: [[Month]] = [[.init(name: "January", products: ["1", "2"]),.init(name: "February", products: ["1", "2"]),.init(name: "March", products: ["1", "2"])],
[.init(name: "April", products: ["1", "2"]), .init(name: "May", products: ["1", "2"]), .init(name: "June", products: ["1", "2"])]]

  var body: some View {

        ForEach (self.quarters.indices , id: \.self) { (index) in

        VStack {
        Spacer()
            HStack {
                Text("Q\(index)")
                .font(.system(size: 40, weight: .black, design: .rounded))
                Button("TestButton",action: {
                    self.quarters.append([.init(name: "January", products: ["1", "2"]),.init(name: "February", products: ["1", "2"]),.init(name: "March", products: ["1", "2"])])
                })
            }
             Spacer()
        }
    }

 }}                                                                                                
0 голосов
/ 30 октября 2019

Одним из способов решения этой проблемы является поиск позиции элементов в массиве

Text("Q\(self.quarters.firstIndex(of: quarter)!)")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...