Как чередовать строки с помощью SwiftUI?

Поскольку я немного возился со SwiftUI, мне интересно, как получить горизонтальный ScrollView с двумя чередующимися строками.

При использовании моего примера я получаю следующее сообщение:

Компилятор не может проверить тип этого выражения в разумные сроки; попробуйте разбить выражение на отдельные подвыражения

import SwiftUI

struct LabelFilter: View {
    var allLabels = ["one", "two", "three", "four", "five", "six", "seven"]

    var body: some View {
        ScrollView(.horizontal, showsIndicators: false) {
            VStack {
                HStack {
                    ForEach(allLabels.indices) { index in
                        if (index % 2 == 0) {
                            LabelButton(label: self.allLabels[index]) { }
                        }
                    }
                }.padding()
                HStack {
                    ForEach(allLabels.indices) { index in
                        if (index % 2 == 1) {
                            LabelButton(label: self.allLabels[index]) { }
                        }
                    }
                }.padding()
            }
        }
    }
}

Почему это происходит, как это исправить и есть ли лучшее решение?


person YannisDC    schedule 08.10.2019    source источник


Ответы (1)


Этот код компилируется:

struct LabelFilter: View {
    var allLabels = ["one", "two", "three", "four", "five", "six", "seven"]

    var evenLabels: [String] {
        stride(from: 0, to: allLabels.count, by: 2).map { allLabels[$0] }
    }

    var oddLabels: [String] {
        stride(from: 1, to: allLabels.count, by: 2).map { allLabels[$0] }
    }

    var body: some View {
        ScrollView(.horizontal, showsIndicators: false) {
            VStack {
                HStack {
                    ForEach(oddLabels, id: \.self) { label in
                        Text(label)
                    }
                }.padding()
                HStack {
                    ForEach(evenLabels, id: \.self) { label in
                        Text(label)
                    }
                }.padding()
            }
        }
    }
}
person Michcio    schedule 08.10.2019