Swift 1.2中的单例模式

时间:2015-02-19 23:41:14

标签: swift

我以前使用过以下单例模式:

class Singleton {
    class var sharedInstance : Singleton {
        struct Static {
            static let instance : Singleton = Singleton()
        }
        return Static.instance
    }   
}

当发布带有Swift 1.2的新Xcode beta时,我想尝试新的静态类属性和方法。所以我尝试了类似的东西:

class Singleton {
    static let sharedInstance : Singleton = Singleton()
}

在使用它时查看调试器,似乎很多单例类的嵌套实例是由类常量创建的:

Screenshot of debugger

但是通过分配来看,似乎只创建了一个实例。我想这意味着它正常工作,但我没有看到第一种模式的相同行为。

2 个答案:

答案 0 :(得分:4)

这里发生的事情是LLDB向您显示静态数据,就好像它是实例数据一样。

因为它是静态数据,所以它不存在"在实例中#34;正常实例数据的工作方式,这会导致LLDB读取它不应该读取的内存,并将其呈现给您,就好像它是有效的一样。

通常,调试器不应在实例中显示静态数据(比较等效的C ++和LLDB表示的方式)。

答案 1 :(得分:0)

您可以在swift 1.2 single ton implementation中验证您的代码是否正确。 没有必要声明Singleton。

static let sharedInstance = Singleton()