在 Swift 中,单例是一种设计模式,它确保一个类只能有一个实例。这样的类被称为单例类。
要创建单例类,我们需要遵循一些规则:
1. 创建一个私有初始化器
初始化器允许我们实例化一个类的对象。将类的初始化器设为私有可以限制从类外部创建该类的对象。
class FileManager {
...
// create a private initializer
private init() {
}
}
// Error Code
let obj = FileManager()
在这里,`FileManager` 类的初始化器是 `private` 的。因此,当我们尝试在类外部创建 `FileManager` 的对象时,我们会收到一个错误。
2. 创建静态类型的单例对象
在单例类中,我们创建该类的单个静态类型对象。将对象设为静态类型允许我们使用类名来访问该对象。
class FileManager {
// static property to create singleton
static let fileObj = FileManager()
...
}
// access the singleton
let data = FileManger.fileObj
在这里,我们通过类名 `FileManager` 来访问 `fileObj` 对象。
示例:Swift 单例
class FileManager{
// create a singleton
static let fileObj = FileManager()
// create a private initializer
private init() {
}
// method to request file
func checkFileAccess(user: String) {
// condition to check username
if user == ("@programiz.com") {
print("Access Granted")
}
else {
print(" Access Denied")
}
}
}
let userName = "@programiz.com"
// access method
let file = FileManager.fileObj
file.checkFileAccess(user: userName)
输出
Access Granted
在上面的示例中,我们创建了一个名为 `FileManager` 的单例类。由于它是一个单例类,我们将其初始化器设为 `private`,并创建了一个名为 `fileObj` 的 `static` 对象。
注意这行:
var file = FileManager.fileObj
file.checkFileAccess(user: userName)
在这里,我们通过类名 `FileManager` 访问了 `fileObj` 对象。然后我们访问了 `checkFileAccess()` 方法。
注意:设计模式就像我们的代码库,其中包含世界各地的程序员共享的各种编码技术。
值得注意的是,只有少数场景(例如文件管理、API 请求)使用单例是有意义的。如果您不确定是否应使用单例,我们建议您完全避免使用它们。了解更多:单例有什么不好?