Uso de dispatch_once para criar singleton em Swift: como fazer corretamente?
Olá a todos! Comecei a estudar Swift depois de Objective-C e estou com um problema para implementar o padrão singleton. Em Objective-C, eu costumava usar dispatch_once para garantir que a inicialização ocorresse apenas uma vez, mesmo em ambiente multithread. Mais ou menos assim:
```
+ (instancetype)sharedInstance {
static MyClass *sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[MyClass alloc] init];
});
return sharedInstance;
}
```
Agora estou tentando fazer o mesmo em Swift. Li que em Swift existem propriedades let e static que são thread-safe por padrão. Mas não entendo muito bem como isso funciona. Tentei escrever assim:
```
class MyClass {
static var shared: MyClass {
d