【发布时间】:2017-08-15 15:24:33
【问题描述】:
我知道用swift写单例最简单的方法是
class A {
static let shared = A()
private init() { //... }
func a() {}
}
// usage
A.shared.a()
问题是可以写一个A类的子类单例吗?
我从某人那里得到以下代码,通过类函数来完成
class A {
class func shared() -> A {
private struct _A {
static let _shared = A()
}
return _A.shared
}
func a() { //... }
}
class B: A {
class func shared() -> B {
private struct _B {
static let _shared = B()
}
return _B.shared
}
func b() { //... }
}
// usage
A.shared.a()
B.shared.b()
但问题是我不能在这里使用 private init() 来隐藏初始化,因为没有protected init() 可以这样做
有谁知道如何使用私有 init() 子类化单例类? 谢谢!
【问题讨论】:
-
来自stackoverflow.com/questions/35865212/…:“你永远不会继承单例。因为如果你继承它,那么它就不再是单例了”
-
感谢@MartinR!因为我刚刚从 GoF Design Patterns 中阅读了单例模式,并且有一些关于在其他语言中子类化单例的内容,所以想知道我们可以在 Swift 中做到这一点
-
为什么需要对单例进行子类化?迅速它没有意义
-
@SaiLi:你想达到什么目的?您读到了什么关于哪种语言的信息?
-
@Kingalione 只想快速实现书中的单例继承,想知道我是否可以快速实现,谢谢
标签: swift oop design-patterns singleton