簡體   English   中英

Singleton類迅速返回其屬性nil?

[英]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

調用aSingletonC.a

代碼的作用是創建一個SingletonC實例並將其放入ab 然后將ab a屬性設置為"fdsfds" (只有ab實例的a值為"fdsfds" )。

第三行, SingletonC.sharedInstance.a創建一個新的SingletonC實例,並將其放入Static.instance (僅通過使用dispatch_once函數創建一次)。 因此, absharedInstanceSingletonC不同實例。

回答您的最新問題:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM