我的印象是使用单例的主要原因是确保在程序中只能创建一个实例。我认为编译器不会让你创建一个单例的实例,好像它是一个普通的类。
在下面的代码中,我有一个单例,我在其中创建了它的多个实例,并且它表现为常规类,但由于某种原因,我预计会出错。
如果一个单例允许你创建多个实例,是什么使单例与普通类不同?
// 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()
我在这里缺少什么,有人可以解释单身人士吗?
答案 0 :(得分:2)
我认为编译器不会让你创建单例的实例,就好像它是普通类一样。
没有名为" singleton"的语言功能,它是一种惯用模式。如果您将单例实现从外部打开以进行实例化,那么编译器就无法做到这一点。
在下面的代码中,我有一个单例,我在其中创建了它的多个实例,并且它表现为常规类,但由于某种原因,我预计会出错。
您应该添加class Car {
static let sharedCar = Car()
func run(){
print("Running")
}
private init() {
}
}
以确保没有外部实例化:
Car
现在,您是唯一可以实例化您的课程的人。代码之外的sharedCar
类用户被迫依赖您为其创建的{{1}}实例。