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

时间:2016-02-05 18:05:20

标签: swift singleton swift-playground

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

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

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

1 个答案:

答案 0 :(得分:8)

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

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

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