递归而不调用先前的功能

时间:2019-02-21 16:59:42

标签: ios swift algorithm recursion uicollectionview

如何创建一个一旦被调用将仅执行具有下一个索引的当前被调用函数的递归函数?

要自动滚动的集合视图嵌套在第一个表格视图单元格内。

我一直在尝试创建一个可以用作常规循环的递归函数。由于循环在后台线程上运行,因此无法使用。

这是我的代码:

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 :(得分:0)

我相信您要这样做的是:

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永远不会被释放。而且,如果有多个单元运行此命令,那么肯定会导致问题。我希望它可以直接在集合视图上运行,而不是在单元格上运行。