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

Why does referencing .self work instead of type.sharedInstance?

我有一些这样的代码:

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() 吗?我不确定,需要解释才能理解这里发生的事情。

任何帮助都是-- 错误,任何解释都将不胜感激。

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