如何“轻松地”触发功能?

时间:2018-08-15 21:47:02

标签: ios swift notifications closures selector

我有以下异步递归代码:

func syncData() {
    dal.getList(...) { [unowned self] list, error in
        if let objects = list {

        if oneTime {
            oneTime = false
            syncOtherStuffNow()
        }

        syncData()  // recurse until all data synced


        } else if let error = error {... }



func syncOtherStuffNow() { }   // with its own recursion

我的理解是,递归将建立调用堆栈,直到所有函数调用完成为止,此时它们将全部展开并释放堆。

我还想从闭包内部触发另一个函数(syncOtherStuffNow)。但是不想将它绑定到带有强引用的闭包上,以等待它返回(即使它也是异步的)。

我实际上如何才能触发syncOtherStuffNow()选择器 trigger 来运行,并且不影响当前的闭包并保持其返回调用?

我考虑过使用Notifications,但是考虑到这两个函数在同一个类中,这似乎有些过分。

2 个答案:

答案 0 :(得分:0)

由于dal.getList()进行了回调,所以我猜它是异步的,因此第一个syncData启动异步调用,然后立即返回,这使syncData()返回。

如果syncOtherStuffNow()异步,它将立即返回,因此dataSync()不会等待它完成工作,因此继续执行到最后。

您可以通过在每个递归上放置一个断点,然后在调用堆栈上查看有多少个相同函数的调用,来测试sth是否构建了调用堆栈。

答案 1 :(得分:0)

我要做的是使用asyncAfter递归,这将取消调用堆栈。