iT邦幫忙

2022 iThome 鐵人賽

DAY 22
0

今天要介紹另一個設計模式(Design pattern)Singleton,iOS官方已經有些實做功能是使用sigleton的。像是通知中心(NotificationCenter)、簡易本地端儲存(UserDefault)、網路連接(URLSession)這些蠻常使用到的功能,或是FileManager, UIApplication等等。有興趣的人都可以去研究哦~

進入正題

https://ithelp.ithome.com.tw/upload/images/20221007/20152659FhhHPyl0ig.png

Singleton

最重要的概念整個應用程式中永遠只會有一個實體存在,簡單來說實體會被整個應用程式共享使用。所以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還有一個問題就是測試很麻煩,因為是共享的,所以無法知道當前狀態。所以測試時的順序就會很重要。


上一篇
Day-21 高階函式 - Sort, Filter, Map, Reduce, Contains
下一篇
Day-23 多人分工的重要性 - 多執行緒(GCD)
系列文
如何成為IOS初級工程師30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言