[英]Singleton Class returning its property nil in swift?
我正在嘗試在Playground中學習Singleton類,但不知道如何獲取它的唯一一個實例。為什么這個Singleton類在訪問其屬性時返回nil?如果有人向我解釋為什么我需要這個Static類,那將是很好的選擇?
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類的方法是什么?
我認為您想要的是靜態屬性。 代替var a: String?
,使用static var a: String?
。
就這樣,所有實例都具有相同的值a
。
調用a
由SingletonC.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
}
關於單例類,它只有一個實例,就好像您要保留值的方式與分配值的方式相同
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
}
這兩個都一樣
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.