Swift में सिंगलटन बनाने के लिए dispatch_once का उपयोग: सही तरीका क्या है?
सभी को नमस्ते! मैंने अभी-अभी Objective-C के बाद Swift सीखना शुरू किया है, और मुझे सिंगलटन पैटर्न को लागू करने में समस्या आ रही है। Objective-C में मैं यह सुनिश्चित करने के लिए dispatch_once का उपयोग करता था कि इनिशियलाइज़ेशन केवल एक बार हो, भले ही मल्टीथ्रेडेड वातावरण में हो। लगभग इस तरह:
```
+ (instancetype)sharedInstance {
static MyClass *sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[MyClass alloc] init];
});
return sharedInstance;
}
```
अब मैं Swift में भी ऐसा ही करने की कोशिश कर रहा हूँ। मैंने पढ़ा है कि Swift में let और static properties हैं जो डिफ़ॉल्ट रूप से thread-safe हैं। लेकिन मुझे पूरी तरह से समझ नहीं आ रहा कि यह कैसे काम करता है। मैंने इस तरह लिखने की कोशिश की:
```
class MyClass {
static var shared: MyClass {
dispatch_once_t onceToken
dispatch_once(&onceToken) {
// ...
}
}
}
```
लेकिन Xcode शिकायत कर रहा है कि Swift में dispatch_once उपलब्ध नहीं है। मैंने देखा कि Swift 3 में इसे पूरी तरह से हटा दिया गया है।