ベストプラクティスは、複数回アクセスできる再利用可能な関数を定義することです。
再利用可能な機能:
たとえば、グローバル関数としてのAppDelegate.swiftのような場所。
func backgroundThread(_ delay: Double = 0.0, background: (() -> Void)? = nil, completion: (() -> Void)? = nil) {
dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_USER_INITIATED.value), 0)) {
background?()
let popTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC)))
dispatch_after(popTime, dispatch_get_main_queue()) {
completion?()
}
}
}
注:Swift 2.0では、上記のQOS_CLASS_USER_INITIATED.valueをQOS_CLASS_USER_INITIATED.rawValueに置き換えてください
使用法:
A. 3秒の遅延でプロセスをバックグラウンドで実行するには:
backgroundThread(3.0, background: {
// Your background function here
})
B.プロセスをバックグラウンドで実行してから、完了をフォアグラウンドで実行するには:
backgroundThread(background: {
// Your function here to run in the background
},
completion: {
// A function to run in the foreground when the background thread is complete
})
C. 3秒遅延する-バックグラウンドパラメータなしの完了パラメータの使用に注意してください。
backgroundThread(3.0, completion: {
// Your delayed function here to be run in the foreground
})