我有一些像这样的代码:
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()吗?我不确定,需要解释才能理解这里发生的事情。
任何帮助都是 - 错误,任何解释都会受到赞赏。
答案 0 :(得分:1)
定义let SI = miniUser()
将调用您的类的init()
以创建共享实例。但是,init()
正在尝试访问共享实例miniUser.SI
,因此这是一个递归定义。编译器根本不应该允许它 - 我建议filing a bug。如果您需要在初始化期间修改实例变量,那就是self.
的用途。 (事实上,你可以省略self.
,因为它暗示了。)