我正在以快捷有效的方式学习Singleton模式来创建Singleton类,并找到了如下创建的最佳方法。
class SingletonClass{
static let sharedInstance = SingletonClass()
}
由于我使用let
语句,因此它是只读属性,必须是线程安全的,所以不需要dispatch_once(),因为目标C.And static
用于制作我猜sharedInstance
变量为class
变量。
但是这怎么能保证整个应用程序只创建一个实例呢?我缺少一件小事吗?
答案 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: 只需使用初始化程序声明一个全局变量并标记它 私有的。