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

iws*_*nmw 2 singleton swift swift-playground

下面的代码是我学习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() {}
}
Run Code Online (Sandbox Code Playgroud)

das*_*ght 8

Playground可以访问私有构造函数,因为private只要您的代码与私有代码在同一个文件中,Swift就可以访问任何内容.

由于直接在操场编辑器窗口中输入的所有内容都被视为单个文件,因此您可以从任何地方访问任何内容.

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

  • 并非游乐场中的所有内容都是单个文件,您可以打开包含playground文件的包,或使用Navigator(左侧面板)添加其他文件或资源.将类放在Sources文件夹中的文件中(如果它不存在则创建它)然后单例将正常工作. (2认同)