Swift 2 では、次のコードでキューを作成できました。
let concurrentQueue = dispatch_queue_create("com.swift3.imageQueue", DISPATCH_QUEUE_CONCURRENT)
しかし、これは Swift 3 ではコンパイルできません。
Swift 3 でこれを記述するための推奨される方法は何ですか?
Swift 2 では、次のコードでキューを作成できました。
let concurrentQueue = dispatch_queue_create("com.swift3.imageQueue", DISPATCH_QUEUE_CONCURRENT)
しかし、これは Swift 3 ではコンパイルできません。
Swift 3 でこれを記述するための推奨される方法は何ですか?
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()
}
}
}
}
OPの質問はすでに上で回答されているので、速度に関する考慮事項をいくつか追加したいだけです:
DispatchQueue.globalで非同期関数に割り当てる優先度クラスによって、大きな違いが生じます。
タスクが低電力コアに割り当てられているように見える iPhone X では特に、 .backgroundスレッド優先度でタスクを実行することはお勧めしません。
XML ファイルから読み取り (バッファリングあり)、データ補間を実行する、計算量の多い関数からの実際のデータを次に示します。
デバイス名 / .background / .utility / .default / .userInitiated / .userInteractive
データ セットはすべてのデバイスで同じではないことに注意してください。iPhone X で最大、iPhone 5s で最小です。
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
}
//ViewController にオブジェクト (ラベル、イメージビュー、テキストビュー) を設定する必要がある場合は、操作キューを使用します
スイフト3
Swiftコードでいくつかのクロージャーを呼び出してから、ストーリーボードで変更したいタイプオフの変更は、アプリケーションがクラッシュすることを表示するために属します
ただし、ディスパッチ方法を使用したい場合、アプリケーションはクラッシュしません
非同期メソッド
DispatchQueue.main.async
{
//Write code here
}
同期方法
DispatchQueue.main.sync
{
//Write code here
}
スイフト3の場合
DispatchQueue.main.async {
// Write your code here
}
DispatchQueue.main.async(execute: {
// code
})
それは今では単純です:
let serialQueue = DispatchQueue(label: "my serial queue")
デフォルトはシリアルです。同時取得するには、オプションの属性引数 .concurrent を使用します