【问题标题】:Why am I allowed to create multiple instances of Singleton, even though its constructor is private?为什么我可以创建多个 Singleton 实例,即使它的构造函数是私有的?
【发布时间】:2016-02-05 18:05:19
【问题描述】:

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

【问题讨论】:

标签: swift singleton swift-playground


【解决方案1】:

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

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

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

【讨论】:

  • 并非 Playground 中的所有内容都是单个文件,您可以打开包含 Playground 文件的包或使用导航器(左侧面板)添加其他文件或资源。将类放在 Sources 文件夹中的文件中(如果不存在则创建它),然后单例就可以正常工作了。
  • @KennethBruno 酷,很高兴知道!不过,我的意思是您直接在 Playground 的编辑器中输入的内容。我编辑了答案,使其更具体。
猜你喜欢
  • 2012-05-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 2019-10-16
相关资源
最近更新 更多