Swift Singleton (单例)

在 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 请求)使用单例是有意义的。如果您不确定是否应使用单例,我们建议您完全避免使用它们。了解更多:单例有什么不好?

目录

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战