iOS8 + Swift: Create a true singleton class
我用swift创建了一个singleton类,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class SingletonClass { class var sharedInstance: SingletonClass { struct Singleton { static let instance = SingletonClass() } return Singleton.instance } var a: Int? var b: Int? var c: Int? } |
这允许我从任意位置访问共享实例:
1 | SingletonClass.sharedInstance |
虽然这是可行的,但它并不能使这个实例成为整个系统中唯一可能的实例,这就是单例技术的全部意义。
这意味着我仍然可以创建一个全新的实例,比如:
1 | let DifferentInstance: SingletonClass = SingletonClass() |
共享实例不再是唯一的实例了。< BR>< BR>所以我的问题是:有没有一种方法可以在swift中创建一个真正的单例类,在这个类中只有一个实例在系统范围内是可能的?
只需将初始值设定项声明为私有:
1 | private init() {} |
现在只能从同一文件中创建新实例。
你误解了单身的本质。独生子的目的是提供独生子,而不是防止邪恶。我可以用另一个ui应用程序来代替
全局变量,嵌套结构,调度一次。选择一个。
The lazy initializer for a global variable (also for static members of
structs and enums) is run the first time that global is accessed, and
is launched as dispatch_once to make sure that the initialization is
atomic. This enables a cool way to use dispatch_once in your code:
just declare a global variable with an initializer and mark it
private.
1 2 3 4 5 6 | private let _singletonInstance = SingletonClass() class SingletonClass { class var sharedInstance: SingletonClass { return _singletonInstance } } |
更多信息在这里。网址:https://github.com/hpique/swiftsingleton