为什么引用.self而不是type.sharedInstance?

时间:2015-07-24 04:00:56

标签: ios swift singleton ios9

我有一些像这样的代码:

class miniUser {

    ///The shared instance of miniUser.
    static let SI = miniUser()

    init()
    {
        self.currentUser = self.getCurrentProfile()! as String
        self.refreshUserList()
    }

...

}

该代码工作正常。但是,此代码使用共享实例...

class miniUser {

    ///The shared instance of miniUser.
    static let SI = miniUser()

    init()
    {
        miniUser.SI.currentUser = miniUser.SI.getCurrentProfile()! as String
        miniUser.SI.refreshUserList()
    }

...

}

这不起作用。实际上,它甚至不会在运行时发出错误,只是在代码的另一部分尝试初始化时,它以0 fps冻结(我使用SpriteKit)。

理想情况下,两个版本的代码都应该是相同的。

有人可以向我解释为什么在初始化期间使用self.function()而不是type.sharedInstance.function()吗?我不确定,需要解释才能理解这里发生的事情。

任何帮助都是 - 错误,任何解释都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

定义let SI = miniUser()将调用您的类的init()以创建共享实例。但是,init()正在尝试访问共享实例miniUser.SI,因此这是一个递归定义。编译器根本不应该允许它 - 我建议filing a bug。如果您需要在初始化期间修改实例变量,那就是self.的用途。 (事实上​​,你可以省略self.,因为它暗示了。)