Swift嚴格的單例寫法

相比OC,Swift有很優雅的實現單例的寫法。

實現

單例類Tools

class Tools {
    // 單例
    static let shared = Tools()

    // 私有化構造方法,不允許外界創建實例
    private init() {
        // 進行初始化工作
    }
}

客戶端調用:

let tools = Tools.shared

說明

  1. 當嘗試使用
let tools = Tools()

這種方法去創建一個Tools實例時,編譯器將會報錯,因為我們把init()方法私有化了,類外無法通過構造方法創建新實例。

  1. static let shared = Tools()是線程安全的,并且將在第一次調用時進行賦值。這在蘋果的官方博客已有說明:

“The lazy initializer for a global variable (also for static members of structs and enums) is run the first time that global is accessed, and is launched as dispatch_once to make sure that the initialization is atomic. This enables a cool way to use dispatch_once in your code: just declare a global variable with an initializer and mark it private.”
“全局變量(還有結構體和枚舉體的靜態成員)的Lazy初始化方法會在其被訪問的時候調用一次。類似于調用dispatch_once以保證其初始化的原子性。這樣就有了一種很酷的單次調用方式:只聲明一個全局變量和私有的初始化方法即可。”

就這么愉快地寫好了單例。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 來源 單例模式的初衷是為了確保某些類的實例唯一,從而避免創建多個不必要的實例來節省資源、避免內存溢出。 特點 實例...
    林天涯閱讀 713評論 1 3
  • 在之前的帖子里聊過狀態管理有多痛苦,有時這是不可避免的。一個狀態管理的例子大家都很熟悉,那就是單例。使用Swift...
    Tank丶Farmer閱讀 6,414評論 0 5
  • 在之前的帖子里聊過狀態管理有多痛苦,有時這是不可避免的。一個狀態管理的例子大家都很熟悉,那就是單例。使用Swift...
    TomatosX閱讀 1,053評論 0 1
  • 在使用swift編程語言進行iOS應用開發的時候,我們常常借助單例來進行狀態管理,但由于實現單例的方法很多,問題就...
    突然自我閱讀 650評論 0 0
  • 往事回憶之ObjC單例Swift是Objective-C的一種自然演變,它用如下的方式實現單例: 在這個現成方案中...
    王小賓閱讀 3,207評論 0 5