我有这样的功能:
func foobar() {
let targetThread = Thread.current
DispatchQueue.main.async {
UIView.animate(withDuration: 0.5, animations: {
// Code I need to run on the main thread
}, completion: {
// Code I want to run on targetThread -- HOW?
}
}
}
如何从targetThread
执行代码?感谢。
答案 0 :(得分:3)
DispatchQueue
不是主题。你会注意到没有办法获得当前线程的当前DispatchQueue
。如果您只想在不是主线程的地方运行代码,可以使用:
DispatchQueue.global().async { ... }
如果你真的想要定位你的特定线程,你有两个选择。
首先,您可以使用NSObject
的{{3}}(或其中一种相关方法)并传递您已获得的NSThread
。您的问题中没有足够的背景说这是否适合您或举例,但您可以搜索。
第二种方法是重新开始使用NSOperationQueue
启动所有这一切的代码,因此foobar()
将在NSOperationQueue
的操作中运行,然后在您的完成动画后,您需要安排另一个NSOperation
在同一个操作队列上运行。您也可以直接使用调度队列执行此操作:即创建自己的调度队列,调度foobar,然后在动画完成时从main调度回队列。