Swift 中的全局变量和共享实例有什么区别?它们各自的使用领域是什么?任何人都可以根据 Swift 澄清他们的概念吗?
全局变量是在文件顶层声明的变量。所以如果我们有一个名为Bar
,您可以存储对实例的引用Bar
在这样的全局变量中:
var bar = Bar()
然后您就可以从任何地方访问该实例,如下所示:
bar
bar.foo()
共享实例或单例如下所示:
class Bar {
static var shared = Bar()
private init() {}
func foo() {}
}
然后,您仍然可以从模块中的任何位置访问共享实例,如下所示:
Bar.shared
Bar.shared.foo()
然而,两者之间最重要的区别之一(除了通常不鼓励使用全局变量这一事实之外)是单例模式限制您创建其他实例Bar
。在第一个示例中,您可以创建更多全局变量:
var bar2 = Bar()
var bar3 = Bar()
然而,使用单例(共享实例),初始化器是私有的,所以尝试这样做......
var baaar = Bar()
...结果如下:
由于“私有”保护级别,“Bar”初始值设定项无法访问
这是一件好事,因为单例的要点是有一个single共享实例。现在,您可以访问实例的唯一方法Bar
是通过Bar.shared
。重要的是要记住添加private init()
在类中,但不要添加任何其他初始化程序,否则将不再强制执行。
如果您想了解更多相关信息,请参阅 KrakenDev 撰写的一篇很棒的文章here.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)