从Swift中的特定线程运行代码

时间:2017-03-07 19:57:46

标签: ios swift grand-central-dispatch nsthread

我有这样的功能:

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执行代码?感谢。

1 个答案:

答案 0 :(得分:3)

DispatchQueue不是主题。你会注意到没有办法获得当前线程的当前DispatchQueue。如果您只想在不是主线程的地方运行代码,可以使用:

DispatchQueue.global().async { ... }

如果你真的想要定位你的特定线程,你有两个选择。

首先,您可以使用NSObject的{​​{3}}(或其中一种相关方法)并传递您已获得的NSThread。您的问题中没有足够的背景说这是否适合您或举例,但您可以搜索。

第二种方法是重新开始使用NSOperationQueue启动所有这一切的代码,因此foobar()将在NSOperationQueue的操作中运行,然后在您的完成动画后,您需要安排另一个NSOperation在同一个操作队列上运行。您也可以直接使用调度队列执行此操作:即创建自己的调度队列,调度foobar,然后在动画完成时从main调度回队列。