我正在尝试在Playground中学习Singleton类,但是不知道如何获得它的唯一一个实例。为什么这个singleton类在访问它的属性时返回nil?如果有人解释我为什么需要这个静态会很好类?
class SingletonC {
var a:String?
class var sharedInstance: SingletonC {
struct Static {
static var onceToken: dispatch_once_t = 0
static var instance: SingletonC? = nil
}
dispatch_once(&Static.onceToken) {
Static.instance = SingletonC()
}
return Static.instance!
}
}
var ab = SingletonC()
ab.a = "fdsfds"
SingletonC.sharedInstance.a //prints nil
更新: 经过实验,有时我得到了值
SingletonC.sharedInstance.a = "Hello"
SingletonC.sharedInstance.a
但是我可以通过首次创建SingletonC
的对象来获得这个吗?使用Singleton类的方法是什么?
答案 0 :(得分:0)
我认为你想要的是静态属性。而不是var a: String?
,请使用static var a: String?
。
这样,所有实例都具有相同的a
值。
按a
SingletonC.a
您的代码所做的是创建SingletonC
的实例并将其放入ab
。并且您将ab
的{{1}}属性设置为a
(仅"fdsfds"
个实例的值为ab
的{{1}}。
第三行a
创建一个新的"fdsfds"
实例并将其放入SingletonC.sharedInstance.a
(仅使用SingletonC
函数创建一次)。因此,Static.instance
和dispatch_once
是ab
的不同实例。
回答您的最新问题:
sharedInstance
答案 1 :(得分:-1)
关于单例类,它只有一个实例,就好像你保留的值一样,你必须为它赋值
class Demo{
// assign value
SingletonC.sharedInstance.a = "Your value"
//get value
println(SingletonC.sharedInstance.a)
var b = SingletonC.shahredInstance.a
}
或者更多,如果你想要一个简单的代码,每次你可以使用它
class Demo{
let obj = Singleton.sharedInstance
// assign value
obj.a = "Your value"
//get value
println(obj.a)
var b = obj.a
}
这两个都是相同的