单类的写法:
- 最丑陋方法(Swift皮, Object-C 心)
class TheOneAndOnlyKraken{//类名
class var sharedInstance: TheOneAndOnlyKraken{//类属性
struct Static {//结构体
static var onceToken: dispatch_once_t = 0
static var instance: TheOneAndOnlyKraken?= nil
}
dispatch_once(&Static.onceToken){// 单类的构成
Static.instance = TheOneAndOnlyKraken()
}
return Static.instance!
}
}
- 结构体方法(新瓶装老酒)
class TheOneAndOnlyKraken {
class var sharedInstance: TheOneAndOnlyKraken {// 类属性
struct Static {// 结构体
static let instance = TheOneAndOnlyKraken()// 静态常量
}
return Static.instance
}
}
- 全局变量方法(单行单类)
private let sharedKraken = TheOneAndOnlyKraken()
class TheOneAndOnlyKraken {
class var shareInstance: TheOneAndOnlyKraken{
return sharedKraken
}
}
- 正确的单类写法
class TheOneAndOnlyKraken {
static let sharedInstance = TheOneAndOnlyKraken()
}
“全局变量(还有结构体和枚举体的静态成员)的Lazy初始化方法会在其被访问的时候调用一次。类似于调用'dispatch_once'以保证其初始化的原子性。这样就有了一种很酷的'单次调用'方式:只声明一个全局变量和私有的初始化方法即可。”--来自Apple's Swift Blog
- 最终的写法
class TheOneAndOnlyKraken{
static let sharedInstance = TheOneAndOnlyKraken()
private init()////This prevents others from using the default '()' initializer for this class
}