Swift - 后台获取和延迟
Posted
技术标签:
【中文标题】Swift - 后台获取和延迟【英文标题】:Swift - Background Fetch and Delay 【发布时间】:2017-06-12 08:56:00 【问题描述】:我在我的应用中实现了后台获取功能。
后台获取调用的函数包含一个延迟函数。
但是这个函数似乎没有触发:
let when = DispatchTime.now() + 2
DispatchQueue.main.asyncAfter(deadline: when)
MyFunction()
它似乎在我唤醒应用程序后立即触发。
为什么这不会在后台获取时触发?
【问题讨论】:
如果这应该是延迟等待某事已经完成,不要那样做。 预期结果是什么?等待(延迟)然后执行MyFunction()
还是相反?
哦,是的,我应该提到我知道这是一种糟糕的做法,但在我的情况下仍然足够好 :)
@AhmadF 是的,等待 x 秒然后执行 MyFunction 是预期的结果。
【参考方案1】:
试试这个代码:
DispatchQueue.global().async
let timer = Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(self.MyFunction), userInfo: nil, repeats: false)
RunLoop.current.add(timer, forMode: .defaultRunLoopMode)
RunLoop.current.run()
【讨论】:
【参考方案2】:我认为您不能在主队列的后台运行。试试这个(将main
更改为global()
):
let when = DispatchTime.now() + 2
DispatchQueue.global().asyncAfter(deadline: when)
MyFunction()
【讨论】:
以上是关于Swift - 后台获取和延迟的主要内容,如果未能解决你的问题,请参考以下文章
在 swift 中使用延迟调用数组项 - 获取 UIResponder 错误
如何消除 animateKeyframes 动画开始和结束的延迟 - Swift UIKit