swift - Swift Singleton 可以是一个具有纯类函数的类吗

标签 swift singleton

感觉讨论在 Swift 的几次迭代前就停止了,但我很好奇,在讨论中,从未有人建议(或者如果我从未见过)单例可以只是一个纯粹的类类函数,例如 -

class MySingleton {

    private static var someVar: String?
    private static var someOtherVar: SomeType?

    class func start() {
        // etc...
    }

    class func doSomething() {
        // etc...
    }

    // etc, etc...
}

我们有什么不应该这样做的充分理由吗?我想不出。

最佳答案

你想达到什么目的?

根据我的经验,如果

  • 你不想创建你的类的实例
  • 你不在乎,有人可以创建你的类的实例(这没有任何好处,但在技术上仍然是可能的)。
  • someVarsomeOtherVar 应包含始终所有实例的相同值。

另一种方法是使用sharedInstance

class MySingleton {
    private(set) static var sharedInstance = MySingleton()
    private var someVar: String?
    private var someOtherVar: SomeType?

    func start() {
        // etc...
    }

    func doSomething() {
        // etc...
    }

    // etc, etc...
}

这为您提供了更大的灵 active 。

  • 如果要使用共享实例,可以调用 MySingleton.sharedInstance.start()
  • 但另一方面,您仍然可以创建自己的实例,例如 let customInstance = MySingleton,为 someVarsomeOtherVar 设置自己的值>.

因此,这实际上取决于您想要实现的目标。如果您想确定没有人可以使用自己的变量创建另一个实例,那么您的方法比我的方法更安全。

在那种情况下,您甚至可能想要考虑将类设为最终类,这样就没有人可以创建行为不同的子类。

关于swift - Swift Singleton 可以是一个具有纯类函数的类吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48225377/

相关文章:

ios - 如何使用 NSDateFormatter 创建计时器(计时)?

ios - 使用 for in 循环使类可迭代?

ios - 每当调用 View Controller 时,保存在 NSUserDefaults 中的 NSArray 的内容都会被覆盖

ios - 如何在初始化函数中将委托(delegate)设置为 self ?

ios - 实现 UITabBarControllerDelegate 不起作用

swift - Xcode、Swift 3 中的多个通知

c++ - 关于C++中的两种单例模式

java - 数据库的单例模式。

c# - 在多线程应用程序中使用单例的危险是什么

Swift - 实现字符串的源文件在哪里