單類的寫法:
- 最丑陋方法(Swift皮, Object-C 心)
class TheOneAndOnlyKraken{//類名
class var sharedInstance: TheOneAndOnlyKraken{//類屬性
struct Static {//結(jié)構(gòu)體
static var onceToken: dispatch_once_t = 0
static var instance: TheOneAndOnlyKraken?= nil
}
dispatch_once(&Static.onceToken){// 單類的構(gòu)成
Static.instance = TheOneAndOnlyKraken()
}
return Static.instance!
}
}
- 結(jié)構(gòu)體方法(新瓶裝老酒)
class TheOneAndOnlyKraken {
class var sharedInstance: TheOneAndOnlyKraken {// 類屬性
struct Static {// 結(jié)構(gòu)體
static let instance = TheOneAndOnlyKraken()// 靜態(tài)常量
}
return Static.instance
}
}
- 全局變量方法(單行單類)
private let sharedKraken = TheOneAndOnlyKraken()
class TheOneAndOnlyKraken {
class var shareInstance: TheOneAndOnlyKraken{
return sharedKraken
}
}
- 正確的單類寫法
class TheOneAndOnlyKraken {
static let sharedInstance = TheOneAndOnlyKraken()
}
“全局變量(還有結(jié)構(gòu)體和枚舉體的靜態(tài)成員)的Lazy初始化方法會在其被訪問的時候調(diào)用一次。類似于調(diào)用'dispatch_once'以保證其初始化的原子性。這樣就有了一種很酷的'單次調(diào)用'方式:只聲明一個全局變量和私有的初始化方法即可?!?-來自Apple's Swift Blog
- 最終的寫法
class TheOneAndOnlyKraken{
static let sharedInstance = TheOneAndOnlyKraken()
private init()////This prevents others from using the default '()' initializer for this class
}