Swift单例子类(继承)

时间:2017-08-15 15:24:34

标签: swift oop design-patterns singleton

我知道在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()

但问题是我无法使用私有init()隐藏初始化,因为没有protected init()来执行此操作

有没有人知道如何使用私有init()子类化单例类? 谢谢!

1 个答案:

答案 0 :(得分:1)

我不确定走这条路是个好主意。但是,如果必须,可以将它们保存在同一个文件中,并使用fileprivate来完成此操作。

在A级声明中

fileprivate init() { }
B类声明中的

override fileprivate init() { }
祝你好运!