我知道在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()
来执行此操作
有谁知道如何使用私有(private) init() 来子类化单例类? 谢谢!
最佳答案
我不确定走这条路是不是个好主意。但是,如果必须,您可以将它们保存在同一个文件中并使用 fileprivate 来完成此操作。
在 A 类声明中:
fileprivate init() { }
在 B 类声明中:
override fileprivate init() { }
祝你好运!
关于Swift 单例子类(继承),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45696065/