在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中它已经被完全移除了。