考虑到有一个工厂方法的协议:协议是否可能具有静态工厂方法的默认实现?
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
使用。”
有周围没有任何办法,或者我应该只使用免费的功能?
这是工厂模式的用途。 – Dai
@戴,是的,虽然问题是关于我是否可以使用协议静态方法的默认实现。 – Zomagk
“问题是关于我是否可以使用协议静态方法的默认实现”那么你为什么不说这个问题呢?这不是关于具有静态方法的协议。这是关于协议_extensions_提供_implementation_静态方法。 – matt