全局var与共享实例swift

Par*_*ion 9 global instance swift

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

Sør*_*sen 10

全局变量是在文件的顶层声明的变量.因此,如果我们有一个被调用的类Bar,您可以存储对Bar全局变量中的实例的引用,如下所示:

var bar = Bar()
Run Code Online (Sandbox Code Playgroud)

然后,您就可以从任何地方访问该实例,如下所示:

bar
bar.foo()
Run Code Online (Sandbox Code Playgroud)

共享实例或单例如下所示:

class Bar {
    static var shared = Bar()
    private init() {}
    func foo() {}
}
Run Code Online (Sandbox Code Playgroud)

然后,您仍然可以从模块中的任何位置访问共享实例,如下所示:

Bar.shared
Bar.shared.foo()
Run Code Online (Sandbox Code Playgroud)

然而,两者之间最重要的区别之一(除了通常不鼓励全局变量的事实)是单例模式限制您创建其他实例Bar.在第一个示例中,您可以创建更多全局变量:

var bar2 = Bar()
var bar3 = Bar()
Run Code Online (Sandbox Code Playgroud)

但是,使用单例(共享实例),初始化程序是私有的,因此尝试执行此操作...

var baaar = Bar()
Run Code Online (Sandbox Code Playgroud)

...结果如下:

由于"私人"保护级别,"Bar"初始化程序无法访问

这是一个很好的事情,因为一个单独的一点是,有一个单一的共享实例.现在,您可以访问实例的唯一方法Bar是通过Bar.shared.重要的是要记住private init()在类中添加,而不是添加任何其他初始化程序,或者不再强制执行.

如果您想了解更多相关信息,KrakenDev将在此发表一篇精彩文章.


Ita*_*iha -2

单例(共享实例)

确保只创建一个单例对象的实例,它提供了一个可通过共享实例进行全局访问的对象,甚至可以跨应用程序共享。dispatch_once 函数,执行一个块一次并且only once for the lifetime of an app

全局变量

苹果文档说全局变量是定义的变量outside of any function, method, closure, or type context