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.
No answers yet.
Inicia sesión para dejar una respuesta