Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何锁定异步函数,使其在再次运行之前等待第一次调用完成_Ios_Swift - Fatal编程技术网

Ios 如何锁定异步函数,使其在再次运行之前等待第一次调用完成

Ios 如何锁定异步函数,使其在再次运行之前等待第一次调用完成,ios,swift,Ios,Swift,我不希望同一个异步函数连续运行多次。我希望函数等到函数的第一次调用完成后才能再次运行 我尝试取消事件的链接,然后将其重新连接,但这似乎并没有阻止函数被多次调用 代码: 我还尝试在函数内部将委托设置为nil和self,但这也不起作用调用异步函数时,您可以引入一个正在运行的Bool属性,并将其设置为true。异步函数完成后,将其设置回false。然后,仅当running==false时调用异步函数 func scrollViewDidScroll(scrollView: UIScrollView)

我不希望同一个异步函数连续运行多次。我希望函数等到函数的第一次调用完成后才能再次运行

我尝试取消事件的链接,然后将其重新连接,但这似乎并没有阻止函数被多次调用

代码:


我还尝试在函数内部将委托设置为nil和self,但这也不起作用

调用异步函数时,您可以引入一个正在运行的Bool属性
,并将其设置为
true
。异步函数完成后,将其设置回
false
。然后,仅当
running==false时调用异步函数

func scrollViewDidScroll(scrollView: UIScrollView) {
    if !running {
        running = true
        myAsync()
    }
}

func myAsync() {
    // do your async stuff
    running = false // this has to be done on the main thread after the async stuff has finished
}

修改它以使用非并发的
NSOperationQueue
,这样一次只运行一个任务。这也是我的第一个想法。但是如果我正确理解了这个问题,OP希望防止异步函数在执行过程中被反复调用。当您使用
NSOperationQueue
并不断为异步函数的每次调用添加
NSOperation
时,您将在队列中完成大量顺序操作,这些操作需要很长时间才能完成。
func scrollViewDidScroll(scrollView: UIScrollView) {
    if !running {
        running = true
        myAsync()
    }
}

func myAsync() {
    // do your async stuff
    running = false // this has to be done on the main thread after the async stuff has finished
}