استخدام dispatch_once لإنشاء singleton في Swift: كيف بشكل صحيح؟
مرحبًا بالجميع! لقد بدأت للتو في تعلم Swift بعد Objective-C، وواجهت مشكلة في تنفيذ نمط singleton. في 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، وهي آمنة للخيوط افتراضيًا. لكنني لست متأكدًا تمامًا كيف يعمل هذا. حاولت كتابة:
```
class MyClass {
static var shared: MyClass {
dispatch_once_t onceToken
dispatch_once(&onceToken) {
// ...
}
}
}
```
لكن Xcode يشتكي من أن dispatch_once غير متاح في Swift. رأيت أنه في Swift 3 تم إزالته تمامًا.