如何在Swift 3中创build调度队列

在Swift 2中,我可以用下面的代码创build队列:

let concurrentQueue = dispatch_queue_create("com.swift3.imageQueue", DISPATCH_QUEUE_CONCURRENT) 

但是这不能在Swift 3中编译。

在Swift 3中写这个的首选方法是什么?

创build一个并发队列

 let concurrentQueue = DispatchQueue(label: "queuename", attributes: .concurrent) concurrentQueue.sync { } 

创build一个串行队列

 let serialQueue = DispatchQueue(label: "queuename") serialQueue.sync { } 

asynchronous获取主队列

 DispatchQueue.main.async { } 

主队列同步

 DispatchQueue.main.sync { } 

获取后台线程之一

 DispatchQueue.global(qos: .background).async { } 

Xcode 8.2 beta 2:

获取后台线程之一

 DispatchQueue.global(qos: .default).async { } DispatchQueue.global().async { // qos' default value is ´DispatchQoS.QoSClass.default` } 

如果你想了解使用这些队列。看到这个答案

Swift下编译3 。 这个例子包含了我们需要的大部分语法。

QoS – 新的服务质量语法

weak self破坏保留周期

如果自己不可用,什么都不要做

async global background queue – 用于networking查询

async main queue – 用于触摸UI。

当然,你需要添加一些错误检查到这…

 DispatchQueue.global(qos: .background).async { [weak self] () -> Void in guard let strongSelf = self else { return } strongSelf.flickrPhoto.loadLargeImage { loadedFlickrPhoto, error in if error != nil { print("error:\(error)") } else { DispatchQueue.main.async { () -> Void in activityIndicator.removeFromSuperview() strongSelf.imageView.image = strongSelf.flickrPhoto.largeImage } } } } 

在XCode 8,Swift 3编译https://github.com/rpthomas/Jedisware

  @IBAction func tap(_ sender: AnyObject) { let thisEmail = "emailaddress.com" let thisPassword = "myPassword" DispatchQueue.global(qos: .background).async { // Validate user input let result = self.validate(thisEmail, password: thisPassword) // Go back to the main thread to update the UI DispatchQueue.main.async { if !result { self.displayFailureAlert() } } } } 

我这样做,这是特别重要的,如果你想刷新你的用户界面显示新的数据没有用户注意到像UITableView或UIPickerView。

  DispatchQueue.main.async { /*Write your thread code here*/ } 
  let concurrentQueue = dispatch_queue_create("com.swift3.imageQueue", DISPATCH_QUEUE_CONCURRENT) //Swift 2 version let concurrentQueue = DispatchQueue(label:"com.swift3.imageQueue", attributes: .concurrent) //Swift 3 version 

我重新在Xcode 8,Swift 3中处理了你的代码,这些变化被标记为与你的Swift 2版本相反。

  DispatchQueue.main.async { self.collectionView?.reloadData() // Depends if you were populating a collection view or table view } OperationQueue.main.addOperation { self.lblGenre.text = self.movGenre } 

//如果您需要在视图控制器上填充对象(标签,图像视图,文本视图),则使用“操作队列”

Swift 3

你想在swift代码中调用一些闭包,然后你想在故事板中更改任何types的closures更改属于查看您的应用程序将崩溃

但是你想用dispatch方法你的应用程序不会崩溃

asynchronous方法

 DispatchQueue.main.async { //Write code here } 

同步方法

 DispatchQueue.main.sync { //Write code here } 

对于Swift 3

  DispatchQueue.main.async { // Write your code here } 
  let newQueue = DispatchQueue(label: "newname") newQueue.sync { // your code } 

您可以在swift 3.0中使用此代码创build调度队列

 DispatchQueue.main.async { /*Write your code here*/ } /* or */ let delayTime = DispatchTime.now() + Double(Int64(0.5 * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC) DispatchQueue.main.asyncAfter(deadline: delayTime) { /*Write your code here*/ } 
 DispatchQueue.main.async(execute: { // write code }) 

串行队列:

 let serial = DispatchQueue(label: "Queuename") serial.sync { //Code Here } 

并发队列:

  let concurrent = DispatchQueue(label: "Queuename", attributes: .concurrent) concurrent.sync { //Code Here } 

现在简单地说:

 let serialQueue = DispatchQueue(label: "my serial queue") 

默认是串行的,要获得并发的,你使用可选属性参数.concurrent

 DispatchQueue.main.async(execute: { // code }) 
Interesting Posts