我正在以快速有效的方式学习Singleton模式来创建Singleton类,并找到了如下创建的最佳方法.
class SingletonClass{
static let sharedInstance = SingletonClass()
}
Run Code Online (Sandbox Code Playgroud)
由于我使用了该let语句,因此它是只读属性,并且必须是线程安全的,所以不需要dispatch_once(),因为目标C.And static 用于使sharedInstance变量作为class变量我猜.
但是,这如何保证整个应用程序中只创建了一个实例?我缺少一件小事吗?
对于2015年9月,这里正是你如何在Swift中创建一个单例:
public class Model
{
static let shared = Model()
// ( for ocd friends ... private init() {} )
func test()->Double
{
return 3.33
}
}
Run Code Online (Sandbox Code Playgroud)
其他地方......
// file ViewController.swift, say
import UIKit
class ViewController:UIViewController
{
override func viewDidLoad()
{
super.viewDidLoad()
print("view controller loaded!")
print("singleton test! \( Model.shared.test() )")
}
}
Run Code Online (Sandbox Code Playgroud)
没问题.
public let model = Model.shared
public class Model
{
static let shared = Model()
func test()->Double
{
return 3.33
}
}
Run Code Online (Sandbox Code Playgroud)
那么,你可以简单地在项目范围内进行以下操作:
class ViewController:UIViewController
{
override …Run Code Online (Sandbox Code Playgroud) 我仍然对使用Swift感到困惑,并且希望有人可以帮助澄清我何时以及为什么要他们.根据我对Singleton的理解,它们是单个类实体,这意味着如果我有A类并且我在B类中创建了A类的共享实例,它只是对B中A类的引用,所以如果我改变或修改对象那么引用B类中的A类,原始对象Class不受影响,只有B类中的对象是.
如果我想要A类和B类,并且在B类中创建对A类的直接引用,那么我所做的任何更改都会在A类中发生.直接修改该类,而不是引用该类的对象的实例.