#swiftui
#swiftui
Вопрос:
У меня есть цикл ForEach, который работает с индексом, как я могу заставить этот шаг ForEach получить пользовательский шаг, потому что в ForEach в каждом отдельном цикле он добавит единицу к индексу, как мы можем сделать шаг равным 5, это означает, что в каждом отдельном цикле добавляется 5 вместо 1. Я могу сделать это возможным с помощью if и%, но я не хочу, чтобы ForEach пробовал каждый элемент внутри Items. как мы можем сделать это эффективное кодирование?
Код:
struct ContentView: View
{
var body: some View
{
List
{
ForEach(0 ..< 21) { index in // (Step == 5) not 1
Text("Hello, world!")
.padding()
}
}
}
}
Ответ №1:
Вот возможный подход
List
{
ForEach(Array(stride(from: 0, to: 21, by: 5)), id: .self) { index in // (Step == 5) not 1
Text("Hello, world!")
.padding()
}
}
Комментарии:
1. не могли бы мы удалить (id: .self) или немного изменить форму ForEach ? Я имею в виду, я хочу, чтобы индекс также считывал значение массива, а не просто его количество.
2. можем ли мы удалить (id: .self) — нет (ForEach не является выражением итератора, это view builder со специальным контрактом конструктора). Я хочу, чтобы переменная index read — index содержала значение, то есть: 0, 5, 10…
3. ваш код идеален, мне было любопытно удалить (id: .self) и сделать тот же результат с помощью .indexes , но это не сработало, это начало просто подсчета элементов, не используя значение элемента, вот почему я попросил вас об этом. но нет проблем, я использую (id: .self), для меня (id: .self) это уродливое кодирование.