Как мы можем сделать пользовательский шаг для ForEach SwiftUI?

#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) это уродливое кодирование.