方案A:
通过类常量实现了延迟初始化和类型安全。
class SingletonA1 { //global constant static let sharedInstance = SingletonA1()}
可以通过下面的方式在获得实例前做些设置工作。
class SingletonA2 { //class constant static let sharedInstance: SingletonA2 = { let instance = SingletonA2() //setup code //... return instance }}
方案B:
Swift1.2以前的版本不支类常量,可以用嵌套结构类型的方式实现。
class SingletonB { class var sharedInstance: SingletonB { struct Static { static let instance: SingletonB = SingletonB() } return Static.instance }}
方案C:
Swift3.0以前的版本(dispatch_once在3.0中被废弃)也可以使用传统的Objective-C类似的方式实现。
class SingletonC { class var sharedInstance: SingletonC { struct Static { static var onceToken: dispatch_once_t = 0 static var instance: SingletonC? = nil } dispatch_once(&Static.onceToken) { Static.instance = SingletonC() } return Static.instance! }}