为什么Singleton类可以用作常规类

我的印象是使用单例的主要原因是确保在程序中只能创建一个实例。 我认为编译器不会让你创建一个单例的实例,就好像它是一个普通的类。

在下面的代码中,我有一个单例,我正在创建它的多个实例,它表现为常规类,但由于某种原因,我期待一个错误。

如果一个单例允许你创建多个实例,那么是什么使单例与普通类不同?

// singleton class class Car { static let sharedCar = Car() func run(){ print("Running") } } // use Car.sharedCar.run() // other instances- I was expecting an error here var jetta = Car() jetta.run() var cobalt = Car() cobalt.run() 

我在这里想念的是什么,有人可以解释单身人士吗?

我认为编译器不会让你创建一个单例的实例,就好像它是一个普通的类。

没有称为“单身”的语言function,它是一种惯用的模式。 如果您将单例实现从外部打开以进行实例化,那么编译器就无法做到这一点。

在下面的代码中,我有一个单例,我正在创建它的多个实例,它表现为常规类,但由于某种原因,我期待一个错误。

您应该添加一个private init以确保没有外部实例化:

 class Car { static let sharedCar = Car() func run(){ print("Running") } private init() { } } 

现在,您是唯一可以实例化您的课程的人。 代码之外的Car类用户被迫依赖您为其创建的sharedCar实例。