感觉讨论在 Swift 的几次迭代前就停止了,但我很好奇,在讨论中,从未有人建议(或者如果我从未见过)单例可以只是一个纯粹的类类函数,例如 -
class MySingleton {
private static var someVar: String?
private static var someOtherVar: SomeType?
class func start() {
// etc...
}
class func doSomething() {
// etc...
}
// etc, etc...
}
我们有什么不应该这样做的充分理由吗?我想不出。
最佳答案
你想达到什么目的?
根据我的经验,如果
- 你不想创建你的类的实例
- 你不在乎,有人可以创建你的类的实例(这没有任何好处,但在技术上仍然是可能的)。
someVar
和someOtherVar
应包含始终所有实例的相同值。
另一种方法是使用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
,为someVar
和someOtherVar
设置自己的值>.
因此,这实际上取决于您想要实现的目标。如果您想确定没有人可以使用自己的变量创建另一个实例,那么您的方法比我的方法更安全。
在那种情况下,您甚至可能想要考虑将类设为最终类,这样就没有人可以创建行为不同的子类。
关于swift - Swift Singleton 可以是一个具有纯类函数的类吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48225377/