Avatar ·

在Swift中使用dispatch_once创建单例:如何正确操作?

大家好!我刚从Objective-C开始学习Swift,在实现单例模式时遇到了问题。在Objective-C中,我习惯使用dispatch_once来确保初始化只发生一次,即使在多线程环境下也是如此。大致如下: ``` + (instancetype)sharedInstance { static MyClass *sharedInstance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedInstance = [[MyClass alloc] init]; }); return sharedInstance; } ``` 现在我想在Swift中做同样的事情。我读到Swift中的let和static属性默认是线程安全的。但我不太明白这是如何工作的。我尝试这样写: ``` class MyClass { static var shared: MyClass { dispatch_once_t onceToken dispatch_once(&onceToken) { // ... } } } ``` 但Xcode报错说dispatch_once在Swift中不可用。我看到在Swift 3中它已经被完全移除了。