为什么允许我创建多个 Singleton 实例,即使它的构造函数是私有的?
Why am I allowed to create multiple instances of Singleton, even though its constructor is private?
下面的代码是我学习的一本书中的单例示例Swift。创建只有一个该类型对象的单身人士的目的不是吗?在操场上,我已经能够创建多个 GameManager
s(var a = GameManager()
、var b = GameManager()
等)
顺便说一句,我知道只有一个 defaultManager
对象,并且由于它是静态和常量 (let),因此无法更改。但是我无法使用私有构造函数,因为我能够创建多个 GameManager
s.
class GameManager {
static let defaultManager = GameManager()
var gameScore = 0
var saveState = 0
private init() {}
}
Playground 可以访问私有构造函数,因为 Swift 允许您访问任何 private
只要您的代码与私有代码位于同一文件中。
由于直接输入到 playground 编辑器 window 中的所有内容都被视为单个文件,因此您可以从任何地方访问任何内容。
不过,一旦您将代码放在 Playground 之外,就会强制执行构造函数的可见性,从而阻止您的代码按预期创建 GameManager
的实例。
下面的代码是我学习的一本书中的单例示例Swift。创建只有一个该类型对象的单身人士的目的不是吗?在操场上,我已经能够创建多个 GameManager
s(var a = GameManager()
、var b = GameManager()
等)
顺便说一句,我知道只有一个 defaultManager
对象,并且由于它是静态和常量 (let),因此无法更改。但是我无法使用私有构造函数,因为我能够创建多个 GameManager
s.
class GameManager {
static let defaultManager = GameManager()
var gameScore = 0
var saveState = 0
private init() {}
}
Playground 可以访问私有构造函数,因为 Swift 允许您访问任何 private
只要您的代码与私有代码位于同一文件中。
由于直接输入到 playground 编辑器 window 中的所有内容都被视为单个文件,因此您可以从任何地方访问任何内容。
不过,一旦您将代码放在 Playground 之外,就会强制执行构造函数的可见性,从而阻止您的代码按预期创建 GameManager
的实例。