如何使用计时器停止长时间运行的功能?迅捷4

时间:2019-02-11 03:17:36

标签: ios swift xcode timer nstimer

我有一个可以运行很长时间的函数,如果可能的话,我想给它一个10秒的上限。我还想为用户实现一个Cancel按钮。

我尝试仅在计算变量abort的状态时对其进行检查,但它仍在继续工作。我不太熟悉Grand Central Dispatchtimers,也不知道从这里去哪里。

...



var abort = false

@objc func abortCalculations() {
    abort = true
}


func calculate() {
    abort = false

    let _ = Timer(timeInterval: 10, target: self, selector: #selector(abortCalculations), userInfo: nil, repeats: false)



    dispatchGroup.enter()
    DispatchQueue.global(qos: .userInteractive).async {
        while !abort {
            x += 1 // for example, just something that repeats
                    // when this actually finishes, it leaves the dispatch group
        }
    }
}



...

我希望函数calculate()在计时器停止运行时(或在将来用户按下按钮时)完成。而是继续运行,并且永远不会调用函数abortCalculations()

1 个答案:

答案 0 :(得分:0)

您可以使用类似的Timer来设置中止标志,而不是使用DispatchQueue

var abortFlagItem = DispatchWorkItem(block: {
    self.abort = true
})
DispatchQueue.main.asyncAfter(deadline: .now() + 10, execute: abortFlagItem)

如果您想取消,可以随时致电abortFlagItem.cancel()