Consider a protocol that have a factory method:
public protocol Frobnicator {
func frobnicate()
static func makeRightFrobnicator() -> Frobnicator
}
private class SomeFrobnicatorImplementation: Frobnicator { ... }
private class AnotherFrobnicatorImplementation: Frobnicator { ... }
public extension Frobnicator {
static func makeRightFrobnicator() -> Frobnicator {
if something {
return SomeFrobnicatorImplementation()
} else {
return AnotherFrobnicatorImplementation()
}
}
}
我希望能够在不同的时间构建不同的实现。这些实现本身对模块是私有的,而协议则对客户端代码是公开的。
当我尝试类似上面的代码时,我会得到“静态成员makeRightFrobnicator
不能在协议元类型Frobnicator.Protocol
上使用”的错误信息。
是否有任何方法可以解决这个问题,或者我应该只使用一个自由函数?