Avatar ·

Utilisation de dispatch_once pour créer un singleton en Swift : comment faire correctement ?

Bonjour à tous ! Je viens de commencer à apprendre Swift après Objective-C, et j'ai un problème avec l'implémentation du pattern singleton. En Objective-C, j'avais l'habitude d'utiliser dispatch_once pour garantir que l'initialisation n'ait lieu qu'une seule fois, même dans un environnement multithread. Par exemple : ``` + (instancetype)sharedInstance { static MyClass *sharedInstance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedInstance = [[MyClass alloc] init]; }); return sharedInstance; } ``` Maintenant, j'essaie de faire la même chose en Swift. J'ai lu qu'en Swift, il y a les propriétés let et static qui sont thread-safe par défaut. Mais je ne comprends pas bien comment cela fonctionne. J'ai essayé d'écrire ceci : ``` class MyClass { static var shared: MyClass { dispatch_once_t onceToken dispatch_once(&onceToken) { // ... } } } ``` Mais Xcode se plaint que dispatch_once n'est pas disponible en Swift. J'ai vu qu'en Swift 3, il a été complètement...