SwiftUI - у ForEach есть endIndex или lastindex? - PullRequest
0 голосов
/ 15 октября 2019

Я использую ForEach для создания цикла. Однако я хочу сделать Rectangle условно в зависимости от количества циклов. Например, не отображать прямоугольник при последней итерации цикла.

Какой правильный синтаксис для этого?

Я ищу что-то вроде этого (нерабочий псевдокод)

ForEach(arrayOfThings, id: \.title) { thing in
    // Stuff that happens on every iteration of loop

    // Conditional section
    if (thing.endIndex-1) {
        Rectangle()
        .frame(width: 100, height: 1, alignment: .bottom)
        .foregroundColor(Color("666666"))
    }
}

Я знаю, что есть такие вещи, как for (offset, element) in array.enumerated() { }, но вы не можете использовать их в представлениях. Интересно, есть ли в ForEach удобная функция для решения этой проблемы?

В настоящее время я делаю это для обхода проблемы:

ForEach(0..<arrayOfThings.count) { i in
    // Stuff that happens on every iteration of loop

    // Conditional section
    if (i = self.arrayOfThings.count-1) {
        Rectangle()
        .frame(width: 100, height: 1, alignment: .bottom)
        .foregroundColor(Color("666666"))
    }
}

1 Ответ

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

Если ваш arrayOfThings является Equatable, вы можете сделать

ForEach(arrayOfThings, id: \.title) { thing in
    if thing == arrayOfThings.last {
        // do something
    }
}

Что, на мой взгляд, более читабельно, чем проверка индекса по сравнению с количеством.

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