这感觉就像讨论在几次Swift迭代之前停止了一样,但我很好奇,在讨论中,从未建议(或者如果我从未看过它)单身人士可能只是一个班级纯粹的类函数,例如 -
class MySingleton {
private static var someVar: String?
private static var someOtherVar: SomeType?
class func start() {
// etc...
}
class func doSomething() {
// etc...
}
// etc, etc...
}
我们不应该这样做有什么好的理由吗?我无法想到任何事情。
答案 0 :(得分:0)
如果一个对象从未实例化,那么它不是单例。 没有对象的实例,而不仅仅是单个实例。
这样做没有任何内在错误,但有什么好处?
我觉得真正的比较是在只有类方法和全局函数的类之间。
在那次比较中,我看到的好处是名称间距。创建类方法时,必须使用类的名称限定函数调用,因此可以说
SomeClass.someMethod()
或
SomeOtherClass.someMethod()
这些是两个不同的功能,显而易见它们是不同的功能。
使用全局功能,您只需说
someMethod()
如果在将来某个日期你合并了另一个也有全局函数someMethod()
的代码,你将得到一个关于重复函数的编译器错误,并且必须解决它。
答案 1 :(得分:0)
你想达到什么目的?
根据我的经验,你的方法很好,如果
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...
}
这为您提供了更大的灵活性。
MySingleton.sharedInstance.start()
。 let customInstance = MySingleton
,并为someVar
和someOtherVar
创建自己的值。所以这真的取决于你想要达到的目标。如果你想确定,没有人可以使用自己的vars创建另一个实例,那么你的方法比我的方法更安全。
在这种情况下,您甚至可能要考虑使类成为final,因此没有人可以创建行为不同的子类。