全局var与共享实例swift

时间:2017-07-06 04:42:19

标签: swift instance global

Swift中的全局变量和共享实例有什么区别?他们各自的使用领域是什么?任何人都可以根据Swift澄清他们的概念。

2 个答案:

答案 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的变量。