在這個post,這是非常漂亮,解釋瞭如何單身人士應在斯威夫特來實現,本質上它可以用兩條線來完成:如何實現在Swift中啓動初始化數據的Singleton?
class TheOneAndOnlyKraken {
static let sharedInstance = TheOneAndOnlyKraken()
private init() {} //This prevents others from using the default '()' initializer for this class.
}
但是,會發生什麼,如果我的辛格爾頓應該用一些數據來initalised ?也許它需要封裝一個API密鑰或其他數據,它只能從以外的收到。一個例子可以如下所示:
class TheOneAndOnlyKraken {
let secretKey: String
static let sharedInstance = TheOneAndOnlyKraken()
private init() {} //This prevents others from using the default '()' initializer for this class.
}
在這種情況下,我們不能初始化私有,因爲我們必須創建一個初始化,需要一個String
作爲參數來滿足編譯器:
init(secretKey: String) {
self.secretKey = secretKey
}
怎樣才能保存,我們仍然確保我們有一個線程安全的單例實例?有沒有一種方法可以避免使用dispatch_once
或者我們必須實質上默認回到Objective-C的方式,我們使用dispatch_once
來確保初始化器確實只被調用一次?