En iyi uygulama, birden çok kez erişilebilen yeniden kullanılabilir bir fonksiyon tanımlamaktır.
YENİDEN KULLANILABİLİR FONKSİYON:
Örneğin, Global İşlev olarak AppDelegate.swift gibi bir yerde.
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?()
}
}
}
Not: Swift 2.0'da yukarıdaki QOS_CLASS_USER_INITIATED.value değerini QOS_CLASS_USER_INITIATED.rawValue ile değiştirin yerine
KULLANIM:
A. Arka planda bir işlemi 3 saniyelik bir gecikmeyle çalıştırmak için:
backgroundThread(3.0, background: {
// Your background function here
})
B. Arka planda bir işlemi çalıştırmak için ön planda bir tamamlama çalıştırın:
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 saniye geciktirmek için - arka plan parametresi olmadan tamamlama parametresinin kullanılmasına dikkat edin:
backgroundThread(3.0, completion: {
// Your delayed function here to be run in the foreground
})