Как получить предыдущий элемент в SwiftUI ForEach? - PullRequest
0 голосов
/ 11 марта 2020

У меня есть такой ForEach в SwiftUI:

ForEach(entries) { (e: MyType) in
   NavigationLinkItem(entry: e)
}

Теперь мне нужно также передать предыдущую запись в мой просмотр (NavigationLinkItem), чтобы сделать что-то вроде этого:

ForEach(entries) { (e: MyType) in
   NavigationLinkItem(entry: e, sucessor: ...)
}

Как это реализовать?

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Чтобы сохранить ForEach dynamici c, найдите ниже возможный подход (при условии, что MyType равен Identifiable, а преемник необязательный)

ForEach(Array(entries.enumerated()), id: \.1.id) { (index, e) in
   NavigationLinkItem(entry: e, sucessor: (index == 0 ? nil : self.entries[index - 1]))
}
0 голосов
/ 11 марта 2020

Я бы сделал это. Предполагая, что вам нужно передать объект вашему преемнику. Я бы посоветовал вам сделать преемника необязательным

ForEach((0...entries.count-1), id:\.self) {i in 
   NavigationLinkItem(entry: self.entries[i], sucessor: i == 0 ? self.entries[0] : self.entries[i-1])
}

РЕДАКТИРОВАТЬ: Как предлагается в комментариях, лучше использовать индексы, чем считать.

ForEach((0...entries.indices), id:\.self) {i in 
   NavigationLinkItem(entry: self.entries[i], sucessor: i == self.entries.startIndex ? self.entries.first : self.entries[i-1])
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...