为什么允许我创建多个 Singleton 实例,即使它的构造函数是私有的?

Why am I allowed to create multiple instances of Singleton, even though its constructor is private?

下面的代码是我学习的一本书中的单例示例Swift。创建只有一个该类型对象的单身人士的目的不是吗?在操场上,我已经能够创建多个 GameManagers(var a = GameManager()var b = GameManager() 等)

顺便说一句,我知道只有一个 defaultManager 对象,并且由于它是静态和常量 (let),因此无法更改。但是我无法使用私有构造函数,因为我能够创建多个 GameManagers.

class GameManager {
    static let defaultManager = GameManager()
    var gameScore = 0
    var saveState = 0
    private init() {}
}

Playground 可以访问私有构造函数,因为 Swift 允许您访问任何 private 只要您的代码与私有代码位于同一文件中。

由于直接输入到 playground 编辑器 window 中的所有内容都被视为单个文件,因此您可以从任何地方访问任何内容。

不过,一旦您将代码放在 Playground 之外,就会强制执行构造函数的可见性,从而阻止您的代码按预期创建 GameManager 的实例。