Avatar ·

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