Swift单例模式(Singleton)的实现
方案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!
}
}

浙公网安备 33010602011771号