今天要介紹另一個設計模式(Design pattern)Singleton,iOS官方已經有些實做功能是使用sigleton的。像是通知中心(NotificationCenter)、簡易本地端儲存(UserDefault)、網路連接(URLSession)這些蠻常使用到的功能,或是FileManager, UIApplication等等。有興趣的人都可以去研究哦~
最重要的概念整個應用程式中永遠只會有一個實體存在
,簡單來說實體會被整個應用程式共享使用。所以singleton較常使用在資料庫溝通的類別、處理網路請求的服務等等,整個專案都會需要用到的功能就適合使用singleton。
實作方式非常簡單,我們以下簡單示範程式碼
class Single{
static let shared = Single() //創建自己為對象的實例,這個一定要!!
let number = 6
let name: String = "Andrew"
private override init() { //製作初始化程式,加上private確保不會再次生成
print("初始化")
}
func testFuntion(){ //製作一個正常的function
print("測試功能")
}
}
上面程式碼簡單來說shared實例化了Single,所以可以取得Single內的property跟methods。
下方程式碼示範取得Single裡的項目,打上Single.shared
後面再打上你要的屬性或是方法就可以囉。
print(Single.shared.name) //輸出 Andrew
print(Single.shared.testFunction) //輸出 測試功能
Singleton很容易被過度使用,像是如果你要把訊息從ViewController傳給另一個,可以用delegate, closure, Property observers等很多方式,而不是使用Sigleton。
Singleton還有一個問題就是測試很麻煩,因為是共享的,所以無法知道當前狀態。所以測試時的順序就會很重要。