Swift 单例子类(继承)

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

但问题是我不能在这里使用 private init() 来隐藏初始化,因为没有 protected init() 来执行此操作

有谁知道如何使用私有(private) init() 来子类化单例类? 谢谢!

最佳答案

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

在 A 类声明中:

fileprivate init() { }

在 B 类声明中:

override fileprivate init() { }

祝你好运!

关于Swift 单例子类(继承),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45696065/

相关文章:

swift - 带持续时间的循环动画,Swift 4

javascript - 面向对象 JS : variable passing/referencing query

java - Spring 3 Service Dao 层与抽象类问题

swift - Swift 中 auto 和 escaping 闭包的区别和目的是什么?

ios - 多部分请求 - 使用 UIImage 进行编码的结构

oop - scala:如何建模基本的父子关系

object - Delphi对象: shortcut for TObjectList iteration

java - 整个代码私有(private)静态

design-patterns - 实现 'dirty' -flag 功能的不同方法

linux - 我如何在 ubuntu 15.10 上将 swift 的导出路径添加到 ./profile