如何在swift中创建Singleton对象

时间:2015-06-24 17:09:15

标签: ios swift singleton

我正在以快捷有效的方式学习Singleton模式来创建Singleton类,并找到了如下创建的最佳方法。

class SingletonClass{
    static let sharedInstance = SingletonClass()
}

由于我使用let语句,因此它是只读属性,必须是线程安全的,所以不需要dispatch_once(),因为目标C.And static用于制作我猜sharedInstance变量为class变量。

但是这怎么能保证整个应用程序只创建一个实例呢?我缺少一件小事吗?

4 个答案:

答案 0 :(得分:23)

如果您希望阻止实例化您的课程(有效地限制使用仅限单身人士),那么您将初始化程序标记为private

class SingletonClass {

    static let shared = SingletonClass()

    private init() {
        // initializer code here
    }
}

答案 1 :(得分:9)

只保留一次关键字静态的保证。你可以参考这篇文章: https://thatthinginswift.com/singletons/

希望有所帮助。

  

static关键字表示成员变量或方法可以   访问时无需实例化它所在的类   所属。简单来说,这意味着您可以调用方法,即使   你从未创建过它所属的对象

答案 2 :(得分:4)

创建私有init,例如:

final class Singleton {

    // Can't init is singleton
    private init() { }

    //MARK: Shared Instance

    static let sharedInstance: Singleton = Singleton()

    //MARK: Local Variable

    var emptyStringArray : [String] = []

}

答案 3 :(得分:1)

你是对的。你可能想阅读Files and Initialization关于如何在Swift中处理全局和静态变量

迅捷使用这种方法

  

懒惰地初始化,第一次运行初始化器为全局   被引用,类似于Java。

它说

  

它允许自定义初始化器,在Swift秤中的启动时间干净利落   没有全局初始化程序来减慢它的速度,以及它的顺序   执行是完全可以预测的。

     

全局变量的惰性初始值设定项(也适用于静态成员)   第一次访问全局时运行结构和枚举)   以dispatch_once启动,以确保初始化   原子。这使您可以在代码中使用dispatch_once:   只需使用初始化程序声明一个全局变量并标记它   私有的。