Avatar ·

Uso de dispatch_once para crear un singleton en Swift: ¿cómo hacerlo correctamente?

¡Hola a todos! Acabo de empezar a aprender Swift después de Objective-C, y tengo un problema con la implementación del patrón singleton. En Objective-C solía usar dispatch_once para garantizar que la inicialización ocurra solo una vez, incluso en un entorno multihilo. Algo así: ``` + (instancetype)sharedInstance { static MyClass *sharedInstance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedInstance = [[MyClass alloc] init]; }); return sharedInstance; } ``` Ahora intento hacer lo mismo en Swift. He leído que en Swift hay propiedades let y static que son thread-safe por defecto. Pero no entiendo bien cómo funciona. Intenté escribir esto: ``` class MyClass { static var shared: MyClass { dispatch_once_t onceToken dispatch_once(&onceToken) { // ... } } } ``` Pero Xcode se queja de que dispatch_once no está disponible en Swift. Vi que en Swift 3 fue eliminado por completo.