让这个从不直接使用的类只继承:
class ApiBase {}
如何在此处定义通用静态单例default
? - 所以我可以:
class FooApi: ApiBase {} // Want only one instance of `FooApi`
class BarApi: ApiBase {} // Want only one instance of `BarApi`
FooApi.default.foo_api_only_method_name()
BarApi.default.bar_api_only_method_name()
我唯一能想到的就是创建一个protocol
,FooApi
和BarApi
需要实施。但这似乎不是最理想的,宁愿写一个类似的实现:
func `default`<T: ApiBase>() -> T {
if staticInstance == nil {
staticInstance = T()
}
return staticInstance
}
答案 0 :(得分:1)
我无法找到使用泛型来解决这个问题的方法,但我的建议是放
static let `default` = FooApi()
和
static let `default` = BarApi()
进入两个子类。这样每个人都可以创建自己的单例,而无需太多额外的代码。
答案 1 :(得分:0)
结束添加界面:
protocol Instance {
associatedtype T
// static var _instance: T {get set} # Can't use; can't override :(
static func instance() -> T
}
可以这样使用:
class ApiBase: Instance {
var root: String = ""
static var _instance: ApiBase = ApiBase()
open class func instance() -> ApiBase {
if _instance.root == "" {
_instance = ApiBase()
}
return _instance
}
}
继承:
class FooApi: ApiBase {
static var _fooApi: FooApi = FooApi()
override class func instance() -> FooApi {
if _fooApi.root == "" {
_fooApi = FooApi()
}
return _instance
}
}
这不是最理想的,因为instance
函数的主体在模式上是相同的。但它确实有效。