我正在尝试在 Playground 中学习 Singleton 类,但不知道如何获取它的唯一实例。为什么这个 singleton 类在访问其属性时返回 nil?如果有人能解释我为什么需要这个 Static 就太好了类(class)?
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
更新: 经过试验,有时我得到了值(value)
SingletonC.sharedInstance.a = "Hello"
SingletonC.sharedInstance.a
但是第一次创建SingletonC
的对象可以获取吗?Singleton类的使用方法是什么?
最佳答案
我想你想要的是一个静态属性。代替 var a: String?
,使用 static var a: String?
。
因此,所有实例都具有相同的 a
值。
通过SingletonC.a
调用a
您的代码所做的是创建一个 SingletonC
实例并将其放入 ab
中。然后将 ab
的 a
属性设置为 "fdsfds"
(只有 ab
实例有 a
的值 "fdsfds"
).
第三行,SingletonC.sharedInstance.a
新建一个SingletonC
实例,放到Static.instance
中(只创建一次通过使用 dispatch_once
函数)。因此,ab
和 sharedInstance
是 SingletonC
的不同实例。
更新问题的答案:
dispatch_once(&Static.onceToken) {
let instance = SingletonC()
instance.a = "Your string"
Static.instance = instance
}
关于ios - Singleton 类 swift 返回其属性 nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31017695/