在Swift 2中,我能够用以下代码创建队列:

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

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

在Swift 3中,首选的方式是什么?


当前回答

swift 5更新

串行队列

let serialQueue = DispatchQueue.init(label: "serialQueue")
serialQueue.async {
    // code to execute
}

并发队列

let concurrentQueue = DispatchQueue.init(label: "concurrentQueue", qos: .background, attributes: .concurrent, autoreleaseFrequency: .inherit, target: nil)

concurrentQueue.async {
// code to execute
}

来自苹果文档:

参数

标签

附加到队列上的字符串标签,以便在诸如Instruments、sample、stackshots和崩溃报告等调试工具中惟一地标识队列。因为应用程序、库和框架都可以创建自己的分派队列,所以建议使用反向dns命名风格(com.example.myqueue)。该参数为可选参数,可以为NULL。

qos

与队列关联的服务质量级别。该值决定了系统调度任务执行的优先级。有关可能值的列表,请参见DispatchQoS.QoSClass。

属性

要与队列关联的属性。包含concurrent属性以创建并发执行任务的调度队列。如果忽略该属性,分派队列将按顺序执行任务。

autoreleaseFrequency

自动释放由队列调度的块创建的对象的频率。有关可能值的列表,请参见dispatchqueue . autoreleasfrequency。

目标

执行块的目标队列。如果希望系统提供适合当前对象的队列,则指定DISPATCH_TARGET_QUEUE_DEFAULT。

其他回答

   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版本形成对比。

创建并发队列

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

}  

创建一个串行队列

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

}

异步获取主队列

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.0中使用这段代码创建调度队列

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
}
 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
}

//使用操作队列如果你需要填充对象(标签,imageview, textview)在你的视图控制器