在写Swift的单例方法之前可以温习一下Objective-C中单例的写法:
1 + (instancetype)sharedSingleton{ 2 static id instance; 3 4 static dispatch_once_t onceToken; 5 dispatch_once(&onceToken, ^{ 6 instance = [[self alloc] init]; 7 }); 8 return instance; 9 }
首先可以考虑仿照OC中的写法写一个。
因此Swift中的一种写法可以如下:
1 class Singleton: NSObject { 2 3 static var instance: Singleton? 4 static var onceToken: dispatch_once_t = 0 5 6 //仿照OC中的写法 7 class func sharedSingleton() ->Singleton { 8 dispatch_once_(&onceToken) { () -> Void in 9 instance = Singleton() 10 11 } 12 return instance! 13 } 14 }
Swift在OC基础之上做了很多优化提升,因此可以考虑利用Swift的一些新的特性来实现单例。
考虑到Swift中let本身就是线程安全的,因此在Swift中实现单例可以非常简练:
static let sharedSingleton = Singleton()
由于实现方式已经从原来的函数变成了属性,因此在使用时也需要做相应的调整,使用时如下:
Singleton.sharedSingleton
由此可见,在优化吸收多种语言优点之后出现的Swift,在实现单例上相比以往有了很大提高。