Рекурсия без вызова предыдущих функций - PullRequest
0 голосов
/ 21 февраля 2019

Как можно создать рекурсивную функцию, которая после вызова будет выполнять только текущую вызываемую функцию со следующим индексом?

Представление коллекции для автоматической прокрутки вложено в первую ячейку табличного представления.

Я пытался создать рекурсивную функцию, которая работала бы как обычный цикл.Циклы нельзя использовать, потому что они работают в фоновом потоке.

Это мой код:

var indexItem = 1

func autoScroll(time: Int) {
    DispatchQueue.main.async {
        self.run(after: time) {
            cell._collectionView.scrollToItem(
                at: IndexPath(row: indexItem, section: 0),
                at: .centeredHorizontally, animated: true
            )
            indexItem += 1
            autoScroll(time: 3)
            return
        }
    }
}

autoScroll(time: 3)

Проблема в том, что сначала всегда вызывается функция с предыдущим индексом, а затемон выполняет функцию с фактическим индексом.

1 Ответ

0 голосов
/ 21 февраля 2019

Я считаю, что вы пытаетесь сделать следующее:

func autoScroll(time: DispatchTimeInterval, indexItem: Int = 1) {
    DispatchQueue.main.asyncAfter(deadline: .now() + time) {
        cell._collectionView.scrollToItem(at: IndexPath(row: indexItem, section: 0), at: .centeredHorizontally, animated: true)
        autoScroll(time: time, indexItem: indexItem + 1)
    }
}

autoScroll(time: .seconds(3))

Просто передайте значение функции.

Вам действительно нужен какой-нибудь флаг, который остановит это.Как написано, это гарантирует, что cell никогда не будет выпущен.И если несколько ячеек запускают это, то это определенно вызовет проблему, с которой они будут бороться.Я ожидаю, что это будет выполняться непосредственно в представлении коллекции, а не в ячейке.

...