
- Swift 教程
- Swift - 首頁
- Swift - 概述
- Swift - 環境
- Swift - 基本語法
- Swift - 變數
- Swift - 常量
- Swift - 字面量
- Swift - 註釋
- Swift 運算子
- Swift - 運算子
- Swift - 算術運算子
- Swift - 比較運算子
- Swift - 邏輯運算子
- Swift - 賦值運算子
- Swift - 位運算子
- Swift - 其他運算子
- Swift 高階運算子
- Swift - 運算子過載
- Swift - 算術溢位運算子
- Swift - 恆等運算子
- Swift - 範圍運算子
- Swift 資料型別
- Swift - 資料型別
- Swift - 整數
- Swift - 浮點數
- Swift - Double
- Swift - 布林值
- Swift - 字串
- Swift - 字元
- Swift - 類型別名
- Swift - 可選型別
- Swift - 元組
- Swift - 斷言和前提條件
- Swift 控制流
- Swift - 決策制定
- Swift - if 語句
- Swift - if...else if...else 語句
- Swift - if-else 語句
- Swift - 巢狀 if 語句
- Swift - switch 語句
- Swift - 迴圈
- Swift - for in 迴圈
- Swift - while 迴圈
- Swift - repeat...while 迴圈
- Swift - continue 語句
- Swift - break 語句
- Swift - 穿透語句
- Swift 集合
- Swift - 陣列
- Swift - 集合
- Swift - 字典
- Swift 函式
- Swift - 函式
- Swift - 巢狀函式
- Swift - 函式過載
- Swift - 遞迴
- Swift - 高階函式
- Swift 閉包
- Swift - 閉包
- Swift - 逃逸和非逃逸閉包
- Swift - 自動閉包
- Swift 面向物件
- Swift - 列舉
- Swift - 結構體
- Swift - 類
- Swift - 屬性
- Swift - 方法
- Swift - 下標
- Swift - 繼承
- Swift - 重寫
- Swift - 初始化
- Swift - 析構
- Swift 高階
- Swift - ARC 概述
- Swift - 可選鏈
- Swift - 錯誤處理
- Swift - 併發
- Swift - 型別轉換
- Swift - 巢狀型別
- Swift - 擴充套件
- Swift - 協議
- Swift - 泛型
- Swift - 訪問控制
- Swift - 函式與方法
- Swift - SwiftyJSON
- Swift - 單例類
- Swift 隨機數
- Swift 不透明型別和裝箱型別
- Swift 有用資源
- Swift - 線上編譯
- Swift - 快速指南
- Swift - 有用資源
- Swift - 討論
Swift - 單例類
單例類是一種特殊的類,它只有一個物件,並確保您的應用程式或程式使用該物件。如果您嘗試建立另一個單例類的變數,您將收到錯誤。單例類易於使用,但它有一個主要的缺點,即全域性訪問,這意味著您可以透過共享類的例項在全域性範圍內訪問單例類。
這使得它難以維護,可能導致併發問題等。因此,為了避免過度使用單例物件,我們使用依賴注入。依賴注入將單例物件傳遞到需要它的物件。
如果一個類依賴於單例,並且它們存在於不同的上下文中,那麼您必須將單例匯入到該上下文中,否則無法訪問該單例。
語法
以下是單例類的語法:
class Name{ // body }
建立和訪問單例類
我們可以像使用普通類一樣使用“class”關鍵字建立單例類,但有一些不同的規則,它們是:
單例類應該有一個私有初始化器。
單例類應該有一個靜態型別的物件。
私有初始化器
此私有初始化器阻止從類外部建立物件。如果您嘗試在類外部建立物件,您將收到錯誤。要建立私有初始化器,我們將使用“private”關鍵字。
語法
以下是私有初始化器的語法:
private init(){}
示例
使用私有初始化器建立單例類的 Swift 程式。
import Foundation // Outer class class SingletonClass{ // Creating a private initializer private init(){} func show(){ print("Hello") } } // Creating object outside the class // We will get an error let myObject = SingletonClass() myObject.show()
輸出
它將產生以下輸出:
main.swift:16:16: error: 'SingletonClass' initializer is inaccessible due to 'private' protection level let myObject = SingletonClass()
此處,私有保護級別阻止我們在類外部建立物件。因此,要克服此錯誤,我們必須在類內部建立物件。
靜態物件
如果我們在單例類中有一個靜態物件,我們可以使用類名輕鬆訪問該物件。要建立靜態物件,我們使用“Static”關鍵字。
語法
以下是靜態物件的語法:
static let objectName = className()
以下是訪問靜態物件的語法:
let variableName = className.objectName
示例
使用物件的單例類的 Swift 程式。
import Foundation // Singleton class class SingletonClass{ // Creating object outside the class static let myObject = SingletonClass() // Creating a private initializer private init(){} // Method func show(){ print("Hello I am Singleton Class") } } // Accessing the object let ob = SingletonClass.myObject // Accessing the method ob.show()
輸出
它將產生以下輸出:
Hello I am Singleton Class
單例類 | 普通類 |
---|---|
在程式的整個生命週期中只有一個例項。 | 可以有多個例項。 |
不允許您建立類的例項。 | 允許您使用其初始化器直接建立類的例項。 |
您可以藉助提供對物件全域性訪問的共享屬性和方法來訪問例項。 | 您可以直接訪問例項。 |
在建立物件方面靈活性較差,並且可以在程式碼的不同部分之間使用緊耦合。 | 在建立物件方面靈活性更強,並且可以在程式碼的不同部分之間允許松耦合。 |
由於全域性狀態和依賴項,測試單例類很困難。 | 測試普通類要容易得多。 |
廣告