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

时间:2016-08-07 22:57:52

标签: ios swift 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()

我在这里缺少什么,有人可以解释单身人士吗?

1 个答案:

答案 0 :(得分:2)

  

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

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

  

在下面的代码中,我有一个单例,我在其中创建了它的多个实例,并且它表现为常规类,但由于某种原因,我预计会出错。

您应该添加class Car { static let sharedCar = Car() func run(){ print("Running") } private init() { } } 以确保没有外部实例化:

Car

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