आलसी इनिशियलाइज़्ड ग्लोबल्स का उपयोग करते समय कुछ एक बार इनिशियलाइज़ेशन के लिए समझ में आता है, यह अन्य प्रकारों के लिए समझ में नहीं आता है। यह बहुत कुछ समझ में आता है कि सिंगलटन जैसी चीजों के लिए आलसी इनिशियलाइज्ड ग्लोबल्स का उपयोग करता है, यह स्विज़ल सेटअप की रखवाली जैसी चीज़ों के लिए बहुत मायने नहीं रखता है।
यहाँ प्रेषण 3 शैली का एक प्रेषण है:
public extension DispatchQueue {
private static var _onceTracker = [String]()
public class func once(token: String, block:@noescape(Void)->Void) {
objc_sync_enter(self); defer { objc_sync_exit(self) }
if _onceTracker.contains(token) {
return
}
_onceTracker.append(token)
block()
}
}
यहाँ एक उदाहरण है:
DispatchQueue.once(token: "com.vectorform.test") {
print( "Do This Once!" )
}
या UUID का उपयोग कर रहा है
private let _onceToken = NSUUID().uuidString
DispatchQueue.once(token: _onceToken) {
print( "Do This Once!" )
}
जैसा कि हम वर्तमान में स्विफ्ट 2 से 3 के संक्रमण के समय में हैं, यहां एक उदाहरण स्विफ्ट 2 कार्यान्वयन है:
public class Dispatch
{
private static var _onceTokenTracker = [String]()
public class func once(token token: String, @noescape block:dispatch_block_t) {
objc_sync_enter(self); defer { objc_sync_exit(self) }
if _onceTokenTracker.contains(token) {
return
}
_onceTokenTracker.append(token)
block()
}
}