考慮到有一個工廠方法的協議:協議是否可能具有靜態工廠方法的默認實現?
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