为什么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
实例。
- TableView的问题…如何知道行号
- 在iPhone iOS / Safari上显示HTMLinputtypes编号的缺陷
- TabBarController之前的启动画面
- UIGestureRecognizer:теория,практика,кастомизация
- 在iTunes上传后无效的二进制文件
- 如何将button添加到iPadpopup窗口中的工具栏?
- 如何创buildIOS.IPA文件并使用免费的Apple ID共享?
- 如何使用swift3在TableViewCell的CollectionViewCell中从服务器dynamic显示数据?
- UIWebView canGoBack和canGoForward总是返回NO