我在Mozilla Firefox for iOS存储库中找到了这个。
static let WebServerSharedInstance = WebServer()
class var sharedInstance: WebServer {
return WebServerSharedInstance
}
为什么你要创建一个新的变量,当你在这样的一行中做同样的变量时,它只返回相同的变量?
static let sharedInstance = WebServer()
答案 0 :(得分:2)
我查看了代码,我认为我误解了上下文:
class WebServer {
static let WebServerSharedInstance = WebServer()
class var sharedInstance: WebServer {
return WebServerSharedInstance
}
}
虽然您始终可以使用WebServer.WebServerSharedInstance
来访问单例,但WebServer
的子类可以覆盖sharedInstance
。
class MyServer : WebServer {
override class var sharedInstance: MyServer {
return MyServer()
}
}
但是,我在代码中没有找到任何示例,所以下面的原始答案可能是正确的。
原始答案:
你是对的。绝对没有理由这样做。
这可能直接来自Objective-C,它使用类似的单例语法。
另外,使用Swift 1.0,我们不太确定如何创建单例,以及类上的static let
是否是线程安全的。
答案 1 :(得分:0)
建议WebServerSharedInstance是在文件顶层声明的全局变量,只要程序运行,文件就会存在 - >您可以在所有其他文件中使用该变量
答案 2 :(得分:0)
我不确定上下文。但让我解释一下
之间的主要区别// 1
class var sharedInstance: WebServer {
return WebServerSharedInstance
}
VS
// 2
static let sharedInstance = WebServer()
1
是计算变量,每次访问时都会对其进行评估,而2
懒惰地初始化并仅评估一次。
如果您的代码稍后有人重新分配WebServerSharedInstance
1
将返回新值,而2
将继续返回初始值(如果之前已初始化)。