跳到主要内容

Swift中的单例模式

提示
  1. 单一实例保证:单例模式在 Swift 中确保一个类仅创建一个对象实例,防止外部重复实例化。
  2. 私有构造器和静态对象:通过私有构造器限制外部实例化,同时使用静态属性创建唯一的类对象,以确保全局访问。
  3. 应用与注意事项:单例模式适用于文件管理和API请求等场景,但使用应谨慎,因为它可能限制代码的灵活性和扩展性。

在 Swift 中,单例模式是一种设计模式,确保一个类只能有一个对象。这样的类被称为单例类。

要创建单例类,我们需要遵循一些规则:

1. 创建私有构造器

构造器允许我们实例化一个类的对象。将类的构造器设置为私有可以限制从类的外部创建该类的对象。

class FileManager {

...
// 创建私有构造器
private init() {
}
}

// 错误代码
let obj = FileManager()

这里,FileManager 类的构造器是 private 的。所以,当我们尝试在类的外部创建 FileManager 的对象时,我们会得到一个错误。

2. 创建静态类型单例对象

在单例类中,我们创建类的单个静态类型对象。使对象静态允许我们使用类名来访问该对象。

class FileManager {

// 静态属性创建单例
static let fileObj = FileManager()
...
}

// 访问单例
let data = FileManger.fileObj

这里,我们使用类名 FileManager 访问 fileObj 对象。

示例:Swift 单例

class FileManager {

// 创建单例
static let fileObj = FileManager()

// 创建私有构造器
private init() {

}

// 方法来请求文件
func checkFileAccess(user: String) {

// 检查用户名的条件
if user == ("@mashangxue123.com") {

print("访问授权")
}

else {
print("访问拒绝")
}
}
}

let userName = "@mashangxue123.com"

// 访问方法
let file = FileManager.fileObj

file.checkFileAccess(user: userName)

输出

访问授权

在上述示例中,我们创建了一个名为 FileManager 的单例类。由于它是单例类,我们将构造器设置为 private 并创建了一个名为 fileObjstatic 对象。

注意这行代码,

var file = FileManager.fileObj
file.checkFileAccess(user: userName)

这里,我们使用类名 FileManager 访问了对象 fileObj。然后我们访问了方法 checkFileAccess()

注意: 设计模式就像我们的代码库,包含世界各地程序员共享的各种编码技术。

需要注意的是,只有在少数情况下(如文件管理、API请求)使用单例模式才有意义。如果你不确定是否使用它们,我们建议你完全避免使用单例模式。了解更多:单例模式有什么不好?