Avatar ·

استخدام 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 تم إزالته تمامًا.