为什么这不起作用:
protocol Work {
init()
static func make() -> Self
}
extension Work {
static func make() -> Self {
return self.init()
}
}
class Foo : Work {
required init() {}
}
我可以通过将工厂添加到对象本身来实现继承:
class Foo : Work {
required init() {}
static func make() -> Self {
return self.init()
}
}
我也可以使用非类或标记类final
,但我更喜欢/我需要使用继承。
是否可以在协议上实现默认工厂,以便可继承类型可以符合而无需再次实现。
答案 0 :(得分:1)
如果你想要一个初始化符合协议的对象的工厂,你应该使用总是很棒的generics! E.g。
protocol Work {
init()
static func make<T: Work>(type: T.Type) -> T
}
extension Work {
static func make<T: Work>(type: T.Type) -> T {
return T.init()
}
static func make() -> Self {
return make(Self)
}
}
class Foo : Work {
required init() {}
}