सबसे अच्छा अभ्यास एक पुन: प्रयोज्य फ़ंक्शन को परिभाषित करना है जिसे कई बार एक्सेस किया जा सकता है।
पुन: प्रयोज्य समारोह:
जैसे कि 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?()
}
}
}
नोट: स्विफ्ट 2.0 में, की जगह QOS_CLASS_USER_INITIATED.value साथ ऊपर QOS_CLASS_USER_INITIATED.rawValue बजाय
उपयोग:
ए। 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
})