ios - Singleton 类 swift 返回其属性 nil?

标签 ios swift singleton

我正在尝试在 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 中。然后将 aba 属性设置为 "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
}

关于ios - Singleton 类 swift 返回其属性 nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31017695/

相关文章:

ios - UITableViewAutomaticDimension 不适用于自定义表格单元格

ios - UIStackView 没有正确安排 subview

java - 单例和静态方法Java之间的混淆

iOS:托管对象关系的属性已更改,但托管对象没有注意到

ios - 在没有开发者帐户的情况下测试应用内购买?

ios - 用于在 Objective-C 中对二维数组进行排序的优于 O(n^2) 的算法

swift - 层次结构模型的类或结构?

ios - 在场景之间传递时加载动画

java - 变量的生命周期 : Reference becomes NULL

java - 仅包含具有内部状态的静态成员的类