414

Swift 2 では、次のコードでキューを作成できました。

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

しかし、これは Swift 3 ではコンパイルできません。

Swift 3 でこれを記述するための推奨される方法は何ですか?

4

15 に答える 15

29

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

        }
    }

}
于 2016-10-04T23:30:08.487 に答える
15

OPの質問はすでに上で回答されているので、速度に関する考慮事項をいくつか追加したいだけです:

DispatchQueue.globalで非同期関数に割り当てる優先度クラスによって、大きな違いが生じます。

タスクが低電力コアに割り当てられているように見える iPhone X では特に、 .backgroundスレッド優先度でタスクを実行することはお勧めしません。

XML ファイルから読み取り (バッファリングあり)、データ補間を実行する、計算量の多い関数からの実際のデータを次に示します。

デバイス名 / .background / .utility / .default / .userInitiated / .userInteractive

  1. iPhone X: 18.7秒 / 6.3秒 / 1.8秒 / 1.8秒 / 1.8秒
  2. iPhone 7: 4.6s / 3.1s / 3.0s / 2.8s / 2.6s
  3. iPhone 5s: 7.3s / 6.1s / 4.0s / 4.0s / 3.8s

データ セットはすべてのデバイスで同じではないことに注意してください。iPhone X で最大、iPhone 5s で最小です。

于 2018-05-16T12:45:07.830 に答える
4
 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 にオブジェクト (ラベル、イメージビュー、テキストビュー) を設定する必要がある場合は、操作キューを使用します

于 2017-05-10T08:04:04.640 に答える
2

スイフト3

Swiftコードでいくつかのクロージャーを呼び出してから、ストーリーボードで変更したいタイプオフの変更は、アプリケーションがクラッシュすることを表示するために属します

ただし、ディスパッチ方法を使用したい場合、アプリケーションはクラッシュしません

非同期メソッド

DispatchQueue.main.async 
{
 //Write code here                                   

}

同期方法

DispatchQueue.main.sync 
{
     //Write code here                                  

}
于 2017-05-18T09:46:06.623 に答える
1

スイフト3の場合

   DispatchQueue.main.async {
        // Write your code here
    }
于 2017-08-23T03:49:15.753 に答える
-3
DispatchQueue.main.async(execute: {
   // code
})
于 2017-05-15T04:28:14.687 に答える
-4

それは今では単純です:

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

デフォルトはシリアルです。同時取得するには、オプションの属性引数 .concurrent を使用します

于 2016-09-10T00:36:05.500 に答える