在爪哇中的單例定義:一個(gè)類有且僅有一個(gè)實(shí)例,并且自行實(shí)例化向整個(gè)系統(tǒng)提供
class singleClass: NSObject {
var value = 0
//方式一 全局變量
static let singleDefault = singleClass()
//方式二 使用GCD -> 單例
class func shareDefault() -> singleClass {
struct once {
static var onceToken: dispatch_once_t = 0
static var shareSingle:singleClass! = nil
}
dispatch_once(&once.onceToken) {
once.shareSingle = singleClass()
}
return once.shareSingle
}
//方式三 使用結(jié)構(gòu)體 -> 單例
class func shareDefault2() -> singleClass {
struct single {
static var singleDefault = singleClass()
}
return single.singleDefault
}
private override init() {} //防止被再次實(shí)例化
}
/*
let single1 = singleClass.singleDefault
let single2 = singleClass.shareDefault()
let single3 = singleClass.shareDefault2()

單例
使用例子:比如在游戲中都有唯一一個(gè)游戲管理者統(tǒng)一管理加分之類的,多個(gè)的話就會(huì)出現(xiàn)數(shù)據(jù)不同步混淆混亂等
GameManager.Swift
public class GameManager {
public var score = 0
public static let defaultGameManager = GameManager()
private init() { } //防止被初始化
public func addScore() {
score += 10
}
}
-> 下面 gm1 與 gm2 都是指向同一個(gè)實(shí)例(相對(duì)于它的花名),并沒有創(chuàng)建新的實(shí)例
let gm1 = GameManager.defaultGameManager
gameManager.addScore()
gameManager.score
// = 10
let gm2 = GameManager.defaultGameManager
gm.addScore()
gm.score
// = 20