gpt4 book ai didi

swift - 如何在特定时间戳后终止完成处理程序

转载 作者:搜寻专家 更新时间:2023-11-01 06:14:16 26 4
gpt4 key购买 nike

我已经在按钮操作中编写了完成处理程序,就像下面的代码一样。

func backgroundTask(arg: Bool, completion: (Bool) -> ()) {

completion(arg)
}

在我的按钮中点击

backgroundTask(arg: true, completion: { (success) -> Void in
if success {
print("true")
} else {
print("false")
}
})

当用户多次按下按钮时,完成处理程序会返回那么多时间。

需要多次返回完成处理程序。

我需要放置一个时间戳,之后完成处理程序不需要返回。

最佳答案

您不能简单地取消关闭。您可以改为创建一个包含函数调用的 DispatchWorkItem,然后您可以取消该工作项。不要简单地调用 backgroundTask,您应该在每次用户按下按钮时创建 DispatchWorkItem,对该项目调用 perform,如果截止日期已过。

独立 Playground 示例:

import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true

func backgroundTask(arg: Bool, completion: (Bool) -> ()) {
completion(arg)
}

backgroundTask(arg: true, completion: { (success) -> Void in
if success {
print("true")
} else {
print("false")
}
})

let workItem = DispatchWorkItem(block: { backgroundTask(arg: true, completion: {
(success) -> Void in
if success {
print("true")
DispatchQueue.main.asyncAfter(deadline: .now()+2, execute: {
print("Delayed success") //As long as the deadline is smaller than the deadline of `workItem.cancel()`, this will be printed
})
} else {
print("false")
}
})})

workItem.perform()
DispatchQueue.main.asyncAfter(deadline: .now()+3, execute: {
workItem.cancel()
PlaygroundPage.current.finishExecution()
})

关于swift - 如何在特定时间戳后终止完成处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48423216/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com