在Swift中实现单例方法

时间:2021-01-01 10:47:29

在写Swift的单例方法之前可以温习一下Objective-C中单例的写法:

 + (instancetype)sharedSingleton{
static id instance; static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[self alloc] init];
});
return instance;
}

首先可以考虑仿照OC中的写法写一个。

因此Swift中的一种写法可以如下:

 class Singleton: NSObject {

     static var instance: Singleton?
static var onceToken: dispatch_once_t = //仿照OC中的写法
class func sharedSingleton() ->Singleton {
dispatch_once_(&onceToken) { () -> Void in
instance = Singleton() }
return instance!
}
}

Swift在OC基础之上做了很多优化提升,因此可以考虑利用Swift的一些新的特性来实现单例。

考虑到Swift中let本身就是线程安全的,因此在Swift中实现单例可以非常简练:

 class Singleton: NSObject {
static let sharedSingleton = Singleton()
}

由于实现方式已经从原来的函数变成了属性,因此在使用时也需要做相应的调整,使用时如下:

Singleton.sharedSingleton

由此可见,在优化吸收多种语言优点之后出现的Swift,在实现单例上相比以往有了很大程度的精简。