0
我有一個通用協議,它有一個返回通用參數的方法。協議有兩種實現方式,都將字符串作爲返回類型。我想要一種方法來構建一個類似於基於某個參數的類集羣的特定實例。該方法限制了泛型類型,但有試圖返回時的錯誤:返回專用類型的通用協議swift的方法
「不能類型StringReturn返回表達式轉換成返回類型T」
protocol GenericProtocol {
typealias ReturnType
func doSomething() -> ReturnType
}
struct StringReturn : GenericProtocol {
func doSomething() -> String {
return "first"
}
}
struct AnotherStringReturn : GenericProtocol {
func doSomething() -> String {
return "another"
}
}
func build<T : GenericProtocol where T.ReturnType == String>(param: String) -> T {
if .. {
return StringReturn()
} else {
return AnotherStringReturn
}
}
嗨,這很好,但我想要的功能來決定什麼T結束了,這可能嗎? –
@LukeDeFeo如果你想基於某些條件返回一個對象,我想你可以使用'GenericProtocol'的常規函數作爲返回類型。問題是你的協議有一個相關的類型'ReturnType',它不可能用它作爲返回類型。 –
是的,所以我不會能夠返回通用協議,因爲它具有自我要求,它只能用作通用約束。很煩人,我發現通用協議幾乎是無用的:/ –