Singleton类在swift中返回其属性nil?

时间:2015-06-24 04:34:42

标签: ios swift singleton

我正在尝试在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类的方法是什么?

2 个答案:

答案 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.instancedispatch_onceab的不同实例。

回答您的最新问题:

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

    }

这两个都是相同的