Swift中的全局变量和共享实例有什么区别?他们各自的使用领域是什么?任何人都可以根据Swift澄清他们的概念。
答案 0 :(得分:10)
全局变量是在文件的顶层声明的变量。因此,如果我们有一个名为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
访问Bar.shared
实例的唯一方法。重要的是要记住在课堂上添加private init()
,而不是添加任何其他初始化工具,或者不再强制执行。
如果您想了解更多相关信息,请参阅KrakenDev here的精彩文章。
答案 1 :(得分:-2)
Singleton (分享实例)
确保仅创建单个对象的一个实例&它通过共享的对象实例提供全局可访问,甚至可以跨应用程序共享。
dispatch_once函数,执行一次块only once for the lifetime of an app
。
全局变量
Apple文档说全局变量是定义outside of any function, method, closure, or type context
的变量。